| OLD | NEW |
| 1 {{+bindTo:partials.standard_nacl_article}} | 1 {{+bindTo:partials.standard_nacl_article}} |
| 2 | 2 |
| 3 <section id="debugging"> | 3 <section id="debugging"> |
| 4 <span id="devcycle-debugging"></span><h1 id="debugging"><span id="devcycle-debug
ging"></span>Debugging</h1> | 4 <span id="devcycle-debugging"></span><h1 id="debugging"><span id="devcycle-debug
ging"></span>Debugging</h1> |
| 5 <p>This document describes tools and techniques you can use to debug, monitor, | 5 <p>This document describes tools and techniques you can use to debug, monitor, |
| 6 and measure your application’s performance.</p> | 6 and measure your application’s performance.</p> |
| 7 <div class="contents local" id="table-of-contents" style="display: none"> | 7 <div class="contents local" id="table-of-contents" style="display: none"> |
| 8 <p class="topic-title first">Table Of Contents</p> | 8 <p class="topic-title first">Table Of Contents</p> |
| 9 <ul class="small-gap"> | 9 <ul class="small-gap"> |
| 10 <li><p class="first"><a class="reference internal" href="#diagnostic-information
" id="id2">Diagnostic information</a></p> | 10 <li><p class="first"><a class="reference internal" href="#diagnostic-information
" id="id2">Diagnostic information</a></p> |
| 11 <ul class="small-gap"> | 11 <ul class="small-gap"> |
| 12 <li><a class="reference internal" href="#viewing-process-statistics-with-the-tas
k-manager" id="id3">Viewing process statistics with the task manager</a></li> | 12 <li><a class="reference internal" href="#viewing-process-statistics-with-the-tas
k-manager" id="id3">Viewing process statistics with the task manager</a></li> |
| 13 <li><a class="reference internal" href="#controlling-the-level-of-native-client-
error-and-warning-messages" id="id4">Controlling the level of Native Client erro
r and warning messages</a></li> | 13 <li><a class="reference internal" href="#controlling-the-level-of-native-client-
error-and-warning-messages" id="id4">Controlling the level of Native Client erro
r and warning messages</a></li> |
| 14 </ul> | 14 </ul> |
| 15 </li> | 15 </li> |
| 16 <li><p class="first"><a class="reference internal" href="#basic-debugging" id="i
d5">Basic debugging</a></p> | 16 <li><p class="first"><a class="reference internal" href="#basic-debugging" id="i
d5">Basic debugging</a></p> |
| 17 <ul class="small-gap"> | 17 <ul class="small-gap"> |
| 18 <li><a class="reference internal" href="#writing-messages-to-the-javascript-cons
ole" id="id6">Writing messages to the JavaScript console</a></li> | 18 <li><a class="reference internal" href="#writing-messages-to-the-javascript-cons
ole" id="id6">Writing messages to the JavaScript console</a></li> |
| 19 <li><p class="first"><a class="reference internal" href="#debugging-with-printf"
id="id7">Debugging with printf</a></p> | 19 <li><p class="first"><a class="reference internal" href="#debugging-with-printf"
id="id7">Debugging with printf</a></p> |
| 20 <ul class="small-gap"> | 20 <ul class="small-gap"> |
| 21 <li><a class="reference internal" href="#redirecting-output-to-log-files" id="id
8">Redirecting output to log files</a></li> | 21 <li><a class="reference internal" href="#redirecting-output-to-log-files" id="id
8">Redirecting output to log files</a></li> |
| 22 <li><a class="reference internal" href="#redirecting-output-to-the-javascript-co
nsole" id="id9">Redirecting output to the JavaScript console</a></li> | |
| 23 </ul> | 22 </ul> |
| 24 </li> | 23 </li> |
| 25 <li><a class="reference internal" href="#logging-calls-to-pepper-interfaces" id=
"id10">Logging calls to Pepper interfaces</a></li> | 24 <li><a class="reference internal" href="#logging-calls-to-pepper-interfaces" id=
"id9">Logging calls to Pepper interfaces</a></li> |
| 26 <li><a class="reference internal" href="#debugging-with-visual-studio" id="id11"
>Debugging with Visual Studio</a></li> | 25 <li><a class="reference internal" href="#debugging-with-visual-studio" id="id10"
>Debugging with Visual Studio</a></li> |
| 27 <li><p class="first"><a class="reference internal" href="#debugging-with-nacl-gd
b" id="id12">Debugging with nacl-gdb</a></p> | 26 <li><p class="first"><a class="reference internal" href="#debugging-with-nacl-gd
b" id="id11">Debugging with nacl-gdb</a></p> |
| 28 <ul class="small-gap"> | 27 <ul class="small-gap"> |
| 29 <li><a class="reference internal" href="#debugging-pnacl-pexes-pepper-35-or-late
r" id="id13">Debugging PNaCl pexes (Pepper 35 or later)</a></li> | 28 <li><a class="reference internal" href="#debugging-pnacl-pexes-pepper-35-or-late
r" id="id12">Debugging PNaCl pexes (Pepper 35 or later)</a></li> |
| 30 <li><a class="reference internal" href="#debugging-pnacl-pexes-with-older-pepper
-toolchains" id="id14">Debugging PNaCl pexes (with older Pepper toolchains)</a><
/li> | 29 <li><a class="reference internal" href="#debugging-pnacl-pexes-with-older-pepper
-toolchains" id="id13">Debugging PNaCl pexes (with older Pepper toolchains)</a><
/li> |
| 31 <li><a class="reference internal" href="#running-nacl-gdb" id="id15">Running nac
l-gdb</a></li> | 30 <li><a class="reference internal" href="#running-nacl-gdb" id="id14">Running nac
l-gdb</a></li> |
| 32 </ul> | 31 </ul> |
| 33 </li> | 32 </li> |
| 34 </ul> | 33 </ul> |
| 35 </li> | 34 </li> |
| 36 <li><p class="first"><a class="reference internal" href="#debugging-with-other-t
ools" id="id16">Debugging with other tools</a></p> | 35 <li><p class="first"><a class="reference internal" href="#debugging-with-other-t
ools" id="id15">Debugging with other tools</a></p> |
| 37 <ul class="small-gap"> | 36 <ul class="small-gap"> |
| 38 <li><a class="reference internal" href="#open-source-profiling-tools" id="id17">
Open source profiling tools</a></li> | 37 <li><a class="reference internal" href="#open-source-profiling-tools" id="id16">
Open source profiling tools</a></li> |
| 39 </ul> | 38 </ul> |
| 40 </li> | 39 </li> |
| 41 </ul> | 40 </ul> |
| 42 | 41 |
| 43 </div><h2 id="diagnostic-information">Diagnostic information</h2> | 42 </div><h2 id="diagnostic-information">Diagnostic information</h2> |
| 44 <h3 id="viewing-process-statistics-with-the-task-manager">Viewing process statis
tics with the task manager</h3> | 43 <h3 id="viewing-process-statistics-with-the-task-manager">Viewing process statis
tics with the task manager</h3> |
| 45 <p>You can use Chrome’s Task Manager to display information about a Native
Client | 44 <p>You can use Chrome’s Task Manager to display information about a Native
Client |
| 46 application:</p> | 45 application:</p> |
| 47 <ol class="arabic simple"> | 46 <ol class="arabic simple"> |
| 48 <li>Open the Task Manager by clicking the menu icon <img alt="menu-icon" src="/n
ative-client/images/menu-icon.png" /> and choosing | 47 <li>Open the Task Manager by clicking the menu icon <img alt="menu-icon" src="/n
ative-client/images/menu-icon.png" /> and choosing |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 variable as follows:</p> | 108 variable as follows:</p> |
| 110 <ul class="small-gap"> | 109 <ul class="small-gap"> |
| 111 <li><code>NACLLOG=c:\nacl.log</code></li> | 110 <li><code>NACLLOG=c:\nacl.log</code></li> |
| 112 </ul> | 111 </ul> |
| 113 <aside class="note"> | 112 <aside class="note"> |
| 114 <strong>Note:</strong> If you set the <code>NACL_EXE_STDOUT</code>, <code>NACL_E
XE_STDERR</code>, or | 113 <strong>Note:</strong> If you set the <code>NACL_EXE_STDOUT</code>, <code>NACL_E
XE_STDERR</code>, or |
| 115 <code>NACLLOG</code> variables to redirect output to a file, you must run Chrome
with | 114 <code>NACLLOG</code> variables to redirect output to a file, you must run Chrome
with |
| 116 the <code>--no-sandbox</code> flag. You must also be careful that each variable
points | 115 the <code>--no-sandbox</code> flag. You must also be careful that each variable
points |
| 117 to a different file. | 116 to a different file. |
| 118 </aside> | 117 </aside> |
| 119 <h4 id="redirecting-output-to-the-javascript-console">Redirecting output to the
JavaScript console</h4> | |
| 120 <p>You can also cause output from printf statements in your C/C++ code to be | |
| 121 relayed to the JavaScript side of your application through the Pepper messaging | |
| 122 system, where you can then write the output to the JavaScript console. Follow | |
| 123 these steps:</p> | |
| 124 <ol class="arabic"> | |
| 125 <li><p class="first">Set the <code>NACL_EXE_STDOUT</code> and <code>NACL_EXE_STD
ERR</code> environment variables as | |
| 126 follows:</p> | |
| 127 <ul class="small-gap"> | |
| 128 <li><p class="first"><code>NACL_EXE_STDOUT=DEBUG_ONLY:dev://postmessage</code></
p> | |
| 129 </li> | |
| 130 <li><p class="first"><code>NACL_EXE_STDERR=DEBUG_ONLY:dev://postmessage</code></
p> | |
| 131 </li> | |
| 132 </ul> | |
| 133 <p>These settings tell Native Client to use <code>PostMessage()</code> to send o
utput | |
| 134 that your Native Client module writes to stdout and stderr to the JavaScript | |
| 135 side of your application.</p> | |
| 136 </li> | |
| 137 <li><p class="first">Register a JavaScript handler to receive messages from your
Native Client | |
| 138 module:</p> | |
| 139 <pre class="prettyprint"> | |
| 140 <div id="nacl_container"> | |
| 141 <script type="text/javascript"> | |
| 142 var container = document.getElementById('nacl_container'); | |
| 143 container.addEventListener('message', handleMessage, true); | |
| 144 </script> | |
| 145 <embed id="nacl_module" | |
| 146 src="my_application.nmf" | |
| 147 type="application/x-nacl" /> | |
| 148 </div> | |
| 149 </pre> | |
| 150 </li> | |
| 151 <li><p class="first">Implement a simple JavaScript handler that logs the message
s it receives to | |
| 152 the JavaScript console:</p> | |
| 153 <pre class="prettyprint"> | |
| 154 function handleMessage(message_event) { | |
| 155 console.log(message_event.data); | |
| 156 } | |
| 157 </pre> | |
| 158 <p>This handler works in the simple case where the only messages your Native | |
| 159 Client module sends to JavaScript are messages with the output from stdout | |
| 160 and stderr. If your Native Client module also sends other messages to | |
| 161 JavaScript, your handler will need to be more complex.</p> | |
| 162 <p>Once you’ve implemented a message handler and set up the environment | |
| 163 variables as described above, you can check the JavaScript console to see | |
| 164 output that your Native Client module prints to stdout and stderr. Keep in | |
| 165 mind that your module makes a call to <code>PostMessage()</code> every time it f
lushes | |
| 166 stdout or stderr. Your application’s performance will degrade considerabl
y | |
| 167 if your module prints and flushes frequently, or if it makes frequent Pepper | |
| 168 calls to begin with (e.g., to render).</p> | |
| 169 </li> | |
| 170 </ol> | |
| 171 <h3 id="logging-calls-to-pepper-interfaces">Logging calls to Pepper interfaces</
h3> | 118 <h3 id="logging-calls-to-pepper-interfaces">Logging calls to Pepper interfaces</
h3> |
| 172 <p>You can log all Pepper calls your module makes by passing the following flags | 119 <p>You can log all Pepper calls your module makes by passing the following flags |
| 173 to Chrome on startup:</p> | 120 to Chrome on startup:</p> |
| 174 <pre class="prettyprint"> | 121 <pre class="prettyprint"> |
| 175 --vmodule=ppb*=4 --enable-logging=stderr | 122 --vmodule=ppb*=4 --enable-logging=stderr |
| 176 </pre> | 123 </pre> |
| 177 <p>The <code>vmodule</code> flag tells Chrome to log all calls to C Pepper inter
faces that | 124 <p>The <code>vmodule</code> flag tells Chrome to log all calls to C Pepper inter
faces that |
| 178 begin with “ppb” (that is, the interfaces that are implemented by th
e browser | 125 begin with “ppb” (that is, the interfaces that are implemented by th
e browser |
| 179 and that your module calls). The <code>enable-logging</code> flag tells Chrome t
o log | 126 and that your module calls). The <code>enable-logging</code> flag tells Chrome t
o log |
| 180 the calls to stderr.</p> | 127 the calls to stderr.</p> |
| (...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 531 includes pre-built libraries and library source code, making it much easier to | 478 includes pre-built libraries and library source code, making it much easier to |
| 532 build a module into a .DLL.</p> | 479 build a module into a .DLL.</p> |
| 533 <h3 id="open-source-profiling-tools">Open source profiling tools</h3> | 480 <h3 id="open-source-profiling-tools">Open source profiling tools</h3> |
| 534 <p>For the brave-hearted there are open source tools at <a class="reference exte
rnal" href="http://www.chromium.org/nativeclient">Chromium.org</a> that describe
how to do profiling on | 481 <p>For the brave-hearted there are open source tools at <a class="reference exte
rnal" href="http://www.chromium.org/nativeclient">Chromium.org</a> that describe
how to do profiling on |
| 535 <a class="reference external" href="https://sites.google.com/a/chromium.org/dev/
nativeclient/how-tos/profiling-nacl-apps-on-64-bit-windows">64-bit Windows</a> | 482 <a class="reference external" href="https://sites.google.com/a/chromium.org/dev/
nativeclient/how-tos/profiling-nacl-apps-on-64-bit-windows">64-bit Windows</a> |
| 536 and <a class="reference external" href="http://www.chromium.org/nativeclient/how
-tos/limited-profiling-with-oprofile-on-x86-64">Linux</a> | 483 and <a class="reference external" href="http://www.chromium.org/nativeclient/how
-tos/limited-profiling-with-oprofile-on-x86-64">Linux</a> |
| 537 machines.</p> | 484 machines.</p> |
| 538 </section> | 485 </section> |
| 539 | 486 |
| 540 {{/partials.standard_nacl_article}} | 487 {{/partials.standard_nacl_article}} |
| OLD | NEW |