1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<meta name="robots" content="none">
<title>QuantLib: tracing_example.cpp</title>
<link rel="stylesheet" href="quantlib.css" type="text/css">
<link rel="stylesheet" href="print.css" type="text/css" media="print">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="icon" href="favicon.ico" type="image/x-icon">
</head>
<body>
<div id="container">
<div id="header">
<img class="titleimage"
src="QL-title.jpg" width="212" height="47" border="0"
alt="QuantLib">
<br>
<h3 class="subtitle">A free/open-source library for quantitative finance</h3>
</div>
<div id="menu">
<h3 class="navbartitle">Version 0.3.14</h3>
<hr>
<h3 class="navbartitle">Getting started</h3>
<ul class="navbarlist">
<li class="navlink"><a href="index.html">Introduction</a></li>
<li class="navlink"><a href="overview.html">Project overview</a></li>
<li class="navlink"><a href="where.html">Where to get QuantLib</a></li>
<li class="navlink"><a href="install.html">Installation</a></li>
<li class="navlink"><a href="config.html">Configuration</a></li>
<li class="navlink"><a href="usage.html">Usage</a></li>
<li class="navlink"><a href="faq.html">Frequently asked questions</a></li>
<li class="navlink"><a href="history.html">Version history</a></li>
<li class="navlink"><a href="resources.html">Additional resources</a></li>
<li class="navlink"><a href="group.html">The QuantLib group</a></li>
<li class="navlink"><a href="license.html">Copyright and license</a></li>
</ul>
<hr>
<h3 class="navbartitle">Reference manual</h3>
<ul class="navbarlist">
<li class="navlink"><a href="modules.html">Modules</a></li>
<li class="navlink"><a href="hierarchy.html">Class Hierarchy</a></li>
<li class="navlink"><a href="annotated.html">Compound List</a></li>
<li class="navlink"><a href="files.html">File List</a></li>
<li class="navlink"><a href="functions.html">Compound Members</a></li>
<li class="navlink"><a href="globals.html">File Members</a></li>
<li class="navlink"><a href="todo.html">Todo List</a></li>
<li class="navlink"><a href="bug.html">Known Bugs</a></li>
<li class="navlink"><a href="caveats.html">Caveats</a></li>
<li class="navlink"><a href="test.html">Test Suite</a></li>
<li class="navlink"><a href="deprecated.html">Deprecated Features</a></li>
<li class="navlink"><a href="examples.html">Examples</a></li>
</ul>
</div>
<div id="content">
<!--Doxygen-generated content-->
<!-- Generated by Doxygen 1.5.1 -->
<h1>tracing_example.cpp</h1>This code exemplifies how to insert trace statements to follow the flow of program execution. When compiler under gcc 3.3 and run, the following program will output the following trace: <div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 trace[1]: Entering <span class="keywordtype">int</span> main()
<a name="l00002"></a>00002 trace[2]: Entering <span class="keywordtype">int</span> foo(<span class="keywordtype">int</span>)
<a name="l00003"></a>00003 trace[3]: Entering <span class="keywordtype">int</span> Foo::bar(<span class="keywordtype">int</span>)
<a name="l00004"></a>00004 trace[3]: i = 21
<a name="l00005"></a>00005 trace[3]: At line 16 in tracing_example.cpp
<a name="l00006"></a>00006 trace[3]: Wrong answer
<a name="l00007"></a>00007 trace[3]: i = 42
<a name="l00008"></a>00008 trace[3]: Exiting <span class="keywordtype">int</span> Foo::bar(<span class="keywordtype">int</span>)
<a name="l00009"></a>00009 trace[3]: Entering <span class="keywordtype">int</span> Foo::bar(<span class="keywordtype">int</span>)
<a name="l00010"></a>00010 trace[3]: i = 42
<a name="l00011"></a>00011 trace[3]: At line 13 in tracing_example.cpp
<a name="l00012"></a>00012 trace[3]: Right answer, but no question
<a name="l00013"></a>00013 trace[3]: i = 42
<a name="l00014"></a>00014 trace[3]: Exiting <span class="keywordtype">int</span> Foo::bar(<span class="keywordtype">int</span>)
<a name="l00015"></a>00015 trace[2]: Exiting <span class="keywordtype">int</span> foo(<span class="keywordtype">int</span>)
<a name="l00016"></a>00016 trace[1]: Exiting <span class="keywordtype">int</span> main()
</pre></div> Of course, a word of warning must be added: adding so much tracing to your code might degrade its readability, at least until we devise an Emacs macro to hide trace statements with a couple of keystrokes.<p>
<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
<a name="l00002"></a>00002 <span class="preprocessor">#include <ql/quantlib.hpp></span>
<a name="l00003"></a>00003
<a name="l00004"></a>00004 <span class="keyword">using namespace </span>QuantLib;
<a name="l00005"></a>00005
<a name="l00006"></a>00006 <span class="keyword">namespace </span>Foo {
<a name="l00007"></a>00007
<a name="l00008"></a>00008 <span class="keywordtype">int</span> bar(<span class="keywordtype">int</span> i) {
<a name="l00009"></a>00009 <a name="a0"></a><a class="code" href="group__debug_macros.html#g903ea9f035842ee3560fd787c84887d7">QL_TRACE_ENTER_FUNCTION</a>;
<a name="l00010"></a>00010 <a name="a1"></a><a class="code" href="group__debug_macros.html#g7d82587448e3f5531f79cfb215b905af">QL_TRACE_VARIABLE</a>(i);
<a name="l00011"></a>00011
<a name="l00012"></a>00012 <span class="keywordflow">if</span> (i == 42) {
<a name="l00013"></a>00013 <a name="a2"></a><a class="code" href="group__debug_macros.html#g4b80d6b6b9d0d17493ac81428934f1c0">QL_TRACE_LOCATION</a>;
<a name="l00014"></a>00014 <a name="a3"></a><a class="code" href="group__debug_macros.html#g456b5371fdc64479d393a04b505df5d0">QL_TRACE</a>(<span class="stringliteral">"Right answer, but no question"</span>);
<a name="l00015"></a>00015 } <span class="keywordflow">else</span> {
<a name="l00016"></a>00016 <a class="code" href="group__debug_macros.html#g4b80d6b6b9d0d17493ac81428934f1c0">QL_TRACE_LOCATION</a>;
<a name="l00017"></a>00017 <a class="code" href="group__debug_macros.html#g456b5371fdc64479d393a04b505df5d0">QL_TRACE</a>(<span class="stringliteral">"Wrong answer"</span>);
<a name="l00018"></a>00018 i *= 2;
<a name="l00019"></a>00019 }
<a name="l00020"></a>00020
<a name="l00021"></a>00021 <a class="code" href="group__debug_macros.html#g7d82587448e3f5531f79cfb215b905af">QL_TRACE_VARIABLE</a>(i);
<a name="l00022"></a>00022 <a name="a4"></a><a class="code" href="group__debug_macros.html#g33c013fea8c974f6781441deaa3ea53b">QL_TRACE_EXIT_FUNCTION</a>;
<a name="l00023"></a>00023 <span class="keywordflow">return</span> i;
<a name="l00024"></a>00024 }
<a name="l00025"></a>00025
<a name="l00026"></a>00026 }
<a name="l00027"></a>00027
<a name="l00028"></a>00028 <span class="keywordtype">int</span> foo(<span class="keywordtype">int</span> i) {
<a name="l00029"></a>00029 <span class="keyword">using namespace </span>Foo;
<a name="l00030"></a>00030 <a class="code" href="group__debug_macros.html#g903ea9f035842ee3560fd787c84887d7">QL_TRACE_ENTER_FUNCTION</a>;
<a name="l00031"></a>00031
<a name="l00032"></a>00032 <span class="keywordtype">int</span> j = bar(i);
<a name="l00033"></a>00033 <span class="keywordtype">int</span> k = bar(j);
<a name="l00034"></a>00034
<a name="l00035"></a>00035 <a class="code" href="group__debug_macros.html#g33c013fea8c974f6781441deaa3ea53b">QL_TRACE_EXIT_FUNCTION</a>;
<a name="l00036"></a>00036 <span class="keywordflow">return</span> k;
<a name="l00037"></a>00037 }
<a name="l00038"></a>00038
<a name="l00039"></a>00039 <span class="keywordtype">int</span> main() {
<a name="l00040"></a>00040
<a name="l00041"></a>00041 <a name="a5"></a><a class="code" href="group__debug_macros.html#g69b168aeab2ef4ff9033469b8214a279">QL_TRACE_ENABLE</a>;
<a name="l00042"></a>00042
<a name="l00043"></a>00043 <a class="code" href="group__debug_macros.html#g903ea9f035842ee3560fd787c84887d7">QL_TRACE_ENTER_FUNCTION</a>;
<a name="l00044"></a>00044
<a name="l00045"></a>00045 <span class="keywordtype">int</span> i = foo(21);
<a name="l00046"></a>00046
<a name="l00047"></a>00047 <a class="code" href="group__debug_macros.html#g33c013fea8c974f6781441deaa3ea53b">QL_TRACE_EXIT_FUNCTION</a>;
<a name="l00048"></a>00048 <span class="keywordflow">return</span> 0;
<a name="l00049"></a>00049 }
<a name="l00050"></a>00050
</pre></div>
</div>
<div class="footer">
<table align="top" width="100%">
<tr>
<td align="middle" width="33%">
<strong>QuantLib.org</strong><br>
<a href="http://quantlib.org/">
<img src="QL-small.jpg" alt="QuantLib" align="middle" border=0>
</a>
</td>
<td align="middle" width="33%">
<strong>Hosted by</strong><br>
<a href="http://sourceforge.net"><img src=
"sfnetlogo.png" width="88" height="31"
border="0" alt="SourceForge.net Logo"></a>
</td>
<td align="middle" width="33%">
<strong>Documentation generated by</strong><br>
<a href="http://www.doxygen.org">
<img src="doxygen.png" alt="doxygen" align="middle" border=0 width=110 height=53>
</a></td>
</tr>
</table>
</div>
</div>
</body>
</html>
|