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 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<!--#include file="Head.html"-->
<body bgcolor="#FFFFFF" leftmargin=0 topmargin=0 text="black" link="#0000FF"
vlink="#000000" alink="#000000">
<!--#include file="Table.html"-->
<table>
<tr>
<!--#include file="SideBar.html"-->
<td width="550" valign="top" bgcolor="#FFFFFF">
<div align="left">
<a name="general"></a><font size=5>Advanced Dart</font>
<h3>Putting a Project Specific Logo on DartBoards</h3>
<h3>When a Test Crashes on Windows...</h3>
<p>When a test crashes on Windows, the operating system displays a
dialog asking whether you would like to debug or exit the application.
Dart will stop running tests until a user responds to this dialog.
<p>You can suppress this dialog by modifying two register settings for
<code>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug</code>
to be
<ul>
<li> "Debugger"="dummy.bat"
<li> "Auto"="1"
</ul>
Setting "Auto" to "1" instructs the OS to run the program "dummy.bat"
automatically when an application crashes. Since "dummy.bat" does not
exist, the application simply terminates when it crashes. Normally,
"Auto" is set to "0" indicating the dialog should be displayed and
"Debugger" is set to msdev.
<h3>Email Notifications for Continuous Builds</h3>
<h3>BuildName Notes, BuildStamp Notes</h3>
<h3>Code Coverage</h3>
<p>Assuming you are using <code>gcc</code>, add <code> -fprofile-arcs -ftest-coverage</code> to the compiler
flags. You may also need to use static library linking. Make sure your code is rebuilt from scratch. Then set-up Dart to
run with the <code>Test</code> and <code> Coverage</code> commands. While each test is run, your code will create a set
of coverage files. Dart invokes <code> gcov</code> to process these files.</p>
<p>Hint: Use static libs with coverage. It appears that the compiler flags are
not compatible with dynamic libraries.</p>
<p>Hint: Adding an empty file called .NoDartCoverage to a directory will cause Dart to
ignore any coverage information for files in that directory and its
subdirectories. Alternatively fill the file with one regular expression per line, to
match files you want ignored.</p>
<h3>Checking for memory errors</h3>
<h4>Purify</h4>
<h4>Valgrind</h4>
<p><a href="http://valgrind.kde.org/">valgrind</a> is an open-source profiling tool
that gives results similar to purify. You will need to set VALGRIND_COMMAND in CMake to
the location of your valgrind executable. Optionally, you can also set
VALGRIND_COMMAND_OPTIONS, though it defaults to the following.
<p><code> -q --skin=memcheck
--leak-check=yes --show-reachable=yes --workaround-gcc296-bugs=yes
--num-callers=100</code></p>
<p>Finally, specify the Valgrind
command when running the dashboard client</p>
<p><code>/usr/bin/tclsh /path/to/Dart/Source/Client/DashboardManager.tcl
DartConfiguration.tcl Nightly Start Update Configure Build Valgrind Submit</code></p>
<p>You can see an example of a working valgrind dashboard one
or two days per week (try Mondays) on the <a href="http://vxl.sourceforge.net/">VXL</a>
<a href="http://www.cs.rpi.edu/research/vision/vxl/Testing/Dashboard/MostRecentResults-Nightly/Dashboard.html">dashboard</a>.</p>
<h3>Named Measurements in Dart</h3>
<p> "Named measurements" allow a test to
output information in its stdout stream that gets presented differently from the
remainder of the stdout of a test. Specifically, named measurements take
the form of</p>
<p><code>
<DartMeasurement name="foo" type="numeric/double"
encoding="none" compression="none">
data
</DartMeasurement></code></p>
<p><code>
<DartMeasurementFile name="foo" type="image/jpeg">
filename
</DartMeasrementFile></code></p>
<p>The "type" can be one of the following:
<ul>
<li><code>text/plain</code></li>
<li><code>text/string</code></li>
<li><code>text/html</code></li>
<li><code>text/xml</code></li>
<li><code>link/url</code></li>
<li><code>link/image</code></li>
<li><code>numeric/integer</code></li>
<li><code>numeric/float</code></li>
<li><code>numeric/double</code></li>
<li><code>numeric/boolean</code></li>
<li><code>image/png</code></li>
<li><code>image/jpeg</code></li>
</ul>
<p>
The "encoding" can be:
<ul>
<li><code>none</code> (default, does not have to
be specified)</li>
<li><code>base64</code></li>
</ul>
<p>
The "compression" can be:
<ul>
<li><code>none</code> (default, does not have to
be specified)</li>
<li><code>gzip</code></li>
</ul>
<p>
The "encoding" and "compression" attributes specify how the
data within the tag is encoded or
compressed. In most cases, the encoding and compression will be
"none".
</p>
<p>
The <code> <DartMeasurementFile></DartMeasurementFile></code> tags are provided
for convenience. This tag will
pick the appropriate encoding/compression schemes and convert the tag to a <code> <DartMeasurement></code>
tag.
</p>
<p>
Stdout of the test will be scanned for these tags and the information extracted
into <code>Test.xml</code>. This
data will be presented in a table on the Test result HTML page. The row
headings will be the "name"
of the measurements. The table entries will provide the measurement values
for <code>text/string</code>, <code>link/url</code>, <code>link/image</code>, <code>numeric/*</code>,
<code> image/png</code> and <code>image/jpeg</code>. The table
entries will be links for <code>text/xml</code>, <code> text/html </code> and <code>text/plain</code>.
</p>
<p>
After the table of values, the "rest" (everything that was not within
a Dart tag) of the test's
stdout will be displayed.
</p>
<p>
Currently, the <code>numeric/*</code>, <code>text/string</code>, <code>link/*</code>, and
<code> image/*</code> named measurements
have been implemented
and are in the current repository. The named measurements <code>text/plain</code>,
<code> text/html</code>
and <code> text/xml</code> have not
been implemented yet. Furthermore, the combinations of encodings and
compressions have not been
completely flushed out. But given these restrictions, named measurements are
currently very useful.
</p>
<h3>Debug verses Release</h3>
</div>
</td>
</tr>
</body>
|