| 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> |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 </li> | 33 </li> |
| 34 </ul> | 34 </ul> |
| 35 </li> | 35 </li> |
| 36 <li><p class="first"><a class="reference internal" href="#debugging-with-other-t
ools" id="id16">Debugging with other tools</a></p> | 36 <li><p class="first"><a class="reference internal" href="#debugging-with-other-t
ools" id="id16">Debugging with other tools</a></p> |
| 37 <ul class="small-gap"> | 37 <ul class="small-gap"> |
| 38 <li><a class="reference internal" href="#open-source-profiling-tools" id="id17">
Open source profiling tools</a></li> | 38 <li><a class="reference internal" href="#open-source-profiling-tools" id="id17">
Open source profiling tools</a></li> |
| 39 </ul> | 39 </ul> |
| 40 </li> | 40 </li> |
| 41 </ul> | 41 </ul> |
| 42 | 42 |
| 43 </div><section id="diagnostic-information"> | 43 </div><h2 id="diagnostic-information">Diagnostic information</h2> |
| 44 <h2 id="diagnostic-information">Diagnostic information</h2> | |
| 45 <section id="viewing-process-statistics-with-the-task-manager"> | |
| 46 <h3 id="viewing-process-statistics-with-the-task-manager">Viewing process statis
tics with the task manager</h3> | 44 <h3 id="viewing-process-statistics-with-the-task-manager">Viewing process statis
tics with the task manager</h3> |
| 47 <p>You can use Chrome’s Task Manager to display information about a Native
Client | 45 <p>You can use Chrome’s Task Manager to display information about a Native
Client |
| 48 application:</p> | 46 application:</p> |
| 49 <ol class="arabic simple"> | 47 <ol class="arabic simple"> |
| 50 <li>Open the Task Manager by clicking the menu icon <img alt="menu-icon" src="/n
ative-client/images/menu-icon.png" /> and choosing | 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 |
| 51 <strong>Tools > Task manager</strong>.</li> | 49 <strong>Tools > Task manager</strong>.</li> |
| 52 <li>When the Task Manager window appears, verify that the columns displaying | 50 <li>When the Task Manager window appears, verify that the columns displaying |
| 53 memory information are visible. If they are not, right click in the header | 51 memory information are visible. If they are not, right click in the header |
| 54 row and select the memory items from the popup menu that appears.</li> | 52 row and select the memory items from the popup menu that appears.</li> |
| 55 </ol> | 53 </ol> |
| 56 <p>A browser window running a Native Client application will have at least two | 54 <p>A browser window running a Native Client application will have at least two |
| 57 processes associated with it: a process for the app’s top level (the rende
r | 55 processes associated with it: a process for the app’s top level (the rende
r |
| 58 process managing the page including its HTML and any JavaScript) and one or | 56 process managing the page including its HTML and any JavaScript) and one or |
| 59 more processes for each instance of a Native Client module embedded in the page | 57 more processes for each instance of a Native Client module embedded in the page |
| 60 (each process running native code from one nexe file). The top-level process | 58 (each process running native code from one nexe file). The top-level process |
| 61 appears with the application’s icon and begins with the text “App:&#
8221;. A Native | 59 appears with the application’s icon and begins with the text “App:&#
8221;. A Native |
| 62 Client process appears with a Chrome extension icon (a jigsaw puzzle piece | 60 Client process appears with a Chrome extension icon (a jigsaw puzzle piece |
| 63 <img alt="puzzle" src="/native-client/images/puzzle.png" />) and begins with the
text “Native Client module” followed by the URL | 61 <img alt="puzzle" src="/native-client/images/puzzle.png" />) and begins with the
text “Native Client module” followed by the URL |
| 64 of its manifest file.</p> | 62 of its manifest file.</p> |
| 65 <p>From the Task Manager you can view the changing memory allocations of all the | 63 <p>From the Task Manager you can view the changing memory allocations of all the |
| 66 processes associated with a Native Client application. Each process has its own | 64 processes associated with a Native Client application. Each process has its own |
| 67 memory footprint. You can also see the rendering rate displayed as frames per | 65 memory footprint. You can also see the rendering rate displayed as frames per |
| 68 second (FPS). Note that the computation of render frames can be performed in | 66 second (FPS). Note that the computation of render frames can be performed in |
| 69 any process, but the rendering itself is always done in the top level | 67 any process, but the rendering itself is always done in the top level |
| 70 application process, so look for the rendering rate there.</p> | 68 application process, so look for the rendering rate there.</p> |
| 71 </section><section id="controlling-the-level-of-native-client-error-and-warning-
messages"> | |
| 72 <h3 id="controlling-the-level-of-native-client-error-and-warning-messages">Contr
olling the level of Native Client error and warning messages</h3> | 69 <h3 id="controlling-the-level-of-native-client-error-and-warning-messages">Contr
olling the level of Native Client error and warning messages</h3> |
| 73 <p>Native Client prints warning and error messages to stdout and stderr. You can | 70 <p>Native Client prints warning and error messages to stdout and stderr. You can |
| 74 increase the amount of Native Client’s diagnostic output by setting the | 71 increase the amount of Native Client’s diagnostic output by setting the |
| 75 following <a class="reference external" href="http://en.wikipedia.org/wiki/Envir
onment_variable">environment variables</a>:</p> | 72 following <a class="reference external" href="http://en.wikipedia.org/wiki/Envir
onment_variable">environment variables</a>:</p> |
| 76 <ul class="small-gap"> | 73 <ul class="small-gap"> |
| 77 <li>NACL_PLUGIN_DEBUG=1</li> | 74 <li>NACL_PLUGIN_DEBUG=1</li> |
| 78 <li>NACL_SRPC_DEBUG=[1-255] (use a higher number for more verbose debug output)<
/li> | 75 <li>NACL_SRPC_DEBUG=[1-255] (use a higher number for more verbose debug output)<
/li> |
| 79 <li>NACLVERBOSITY=[1-255]</li> | 76 <li>NACLVERBOSITY=[1-255]</li> |
| 80 </ul> | 77 </ul> |
| 81 </section></section><section id="basic-debugging"> | |
| 82 <h2 id="basic-debugging">Basic debugging</h2> | 78 <h2 id="basic-debugging">Basic debugging</h2> |
| 83 <section id="writing-messages-to-the-javascript-console"> | |
| 84 <h3 id="writing-messages-to-the-javascript-console">Writing messages to the Java
Script console</h3> | 79 <h3 id="writing-messages-to-the-javascript-console">Writing messages to the Java
Script console</h3> |
| 85 <p>You can send messages from your C/C++ code to JavaScript using the PostMessag
e | 80 <p>You can send messages from your C/C++ code to JavaScript using the PostMessag
e |
| 86 call in the <a class="reference internal" href="/native-client/devguide/coding/m
essage-system.html"><em>Pepper messaging system</em></a>. When the | 81 call in the <a class="reference internal" href="/native-client/devguide/coding/m
essage-system.html"><em>Pepper messaging system</em></a>. When the |
| 87 JavaScript code receives a message, its message event handler can call | 82 JavaScript code receives a message, its message event handler can call |
| 88 <a class="reference external" href="https://developer.mozilla.org/en/DOM/console
.log">console.log()</a> to write | 83 <a class="reference external" href="https://developer.mozilla.org/en/DOM/console
.log">console.log()</a> to write |
| 89 the message to the JavaScript <a class="reference external" href="/devtools/docs
/console-api">console</a> in | 84 the message to the JavaScript <a class="reference external" href="/devtools/docs
/console-api">console</a> in |
| 90 Chrome’s Developer Tools.</p> | 85 Chrome’s Developer Tools.</p> |
| 91 </section><section id="debugging-with-printf"> | |
| 92 <h3 id="debugging-with-printf">Debugging with printf</h3> | 86 <h3 id="debugging-with-printf">Debugging with printf</h3> |
| 93 <p>Your C/C++ code can perform inline printf debugging to stdout and stderr by | 87 <p>Your C/C++ code can perform inline printf debugging to stdout and stderr by |
| 94 calling fprintf() directly, or by using cover functions like these:</p> | 88 calling fprintf() directly, or by using cover functions like these:</p> |
| 95 <pre class="prettyprint"> | 89 <pre class="prettyprint"> |
| 96 #include <stdio.h> | 90 #include <stdio.h> |
| 97 void logmsg(const char* pMsg){ | 91 void logmsg(const char* pMsg){ |
| 98 fprintf(stdout,"logmsg: %s\n",pMsg); | 92 fprintf(stdout,"logmsg: %s\n",pMsg); |
| 99 } | 93 } |
| 100 void errormsg(const char* pMsg){ | 94 void errormsg(const char* pMsg){ |
| 101 fprintf(stderr,"logerr: %s\n",pMsg); | 95 fprintf(stderr,"logerr: %s\n",pMsg); |
| 102 } | 96 } |
| 103 </pre> | 97 </pre> |
| 104 <p>By default stdout and stderr will appear in Chrome’s stdout and stderr
stream | 98 <p>By default stdout and stderr will appear in Chrome’s stdout and stderr
stream |
| 105 but they can also be redirected as described below.</p> | 99 but they can also be redirected as described below.</p> |
| 106 <section id="redirecting-output-to-log-files"> | |
| 107 <h4 id="redirecting-output-to-log-files">Redirecting output to log files</h4> | 100 <h4 id="redirecting-output-to-log-files">Redirecting output to log files</h4> |
| 108 <p>You can redirect stdout and stderr to output files by setting these environme
nt variables:</p> | 101 <p>You can redirect stdout and stderr to output files by setting these environme
nt variables:</p> |
| 109 <ul class="small-gap"> | 102 <ul class="small-gap"> |
| 110 <li><code>NACL_EXE_STDOUT=c:\nacl_stdout.log</code></li> | 103 <li><code>NACL_EXE_STDOUT=c:\nacl_stdout.log</code></li> |
| 111 <li><code>NACL_EXE_STDERR=c:\nacl_stderr.log</code></li> | 104 <li><code>NACL_EXE_STDERR=c:\nacl_stderr.log</code></li> |
| 112 </ul> | 105 </ul> |
| 113 <p>There is another variable, <code>NACLLOG</code>, that you can use to redirect
Native | 106 <p>There is another variable, <code>NACLLOG</code>, that you can use to redirect
Native |
| 114 Client’s internally-generated messages. This variable is set to stderr by | 107 Client’s internally-generated messages. This variable is set to stderr by |
| 115 default; you can redirect these messages to an output file by setting the | 108 default; you can redirect these messages to an output file by setting the |
| 116 variable as follows:</p> | 109 variable as follows:</p> |
| 117 <ul class="small-gap"> | 110 <ul class="small-gap"> |
| 118 <li><code>NACLLOG=c:\nacl.log</code></li> | 111 <li><code>NACLLOG=c:\nacl.log</code></li> |
| 119 </ul> | 112 </ul> |
| 120 <aside class="note"> | 113 <aside class="note"> |
| 121 <strong>Note:</strong> If you set the NACL_EXE_STDOUT, NACL_EXE_STDERR, or NACLL
OG | 114 <strong>Note:</strong> If you set the NACL_EXE_STDOUT, NACL_EXE_STDERR, or NACLL
OG |
| 122 variables to redirect output to a file, you must run Chrome with the | 115 variables to redirect output to a file, you must run Chrome with the |
| 123 <code>--no-sandbox</code> flag. You must also be careful that each variable poi
nts to | 116 <code>--no-sandbox</code> flag. You must also be careful that each variable poi
nts to |
| 124 a different file. | 117 a different file. |
| 125 </aside> | 118 </aside> |
| 126 </section><section id="redirecting-output-to-the-javascript-console"> | |
| 127 <h4 id="redirecting-output-to-the-javascript-console">Redirecting output to the
JavaScript console</h4> | 119 <h4 id="redirecting-output-to-the-javascript-console">Redirecting output to the
JavaScript console</h4> |
| 128 <p>You can also cause output from printf statements in your C/C++ code to be | 120 <p>You can also cause output from printf statements in your C/C++ code to be |
| 129 relayed to the JavaScript side of your application through the Pepper messaging | 121 relayed to the JavaScript side of your application through the Pepper messaging |
| 130 system, where you can then write the output to the JavaScript console. Follow | 122 system, where you can then write the output to the JavaScript console. Follow |
| 131 these steps:</p> | 123 these steps:</p> |
| 132 <ol class="arabic"> | 124 <ol class="arabic"> |
| 133 <li><p class="first">Set the NACL_EXE_STDOUT and NACL_EXE_STDERR environment var
iables as | 125 <li><p class="first">Set the NACL_EXE_STDOUT and NACL_EXE_STDERR environment var
iables as |
| 134 follows:</p> | 126 follows:</p> |
| 135 <ul class="small-gap"> | 127 <ul class="small-gap"> |
| 136 <li><p class="first">NACL_EXE_STDOUT=DEBUG_ONLY:dev://postmessage</p> | 128 <li><p class="first">NACL_EXE_STDOUT=DEBUG_ONLY:dev://postmessage</p> |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 JavaScript, your handler will need to be more complex.</p> | 161 JavaScript, your handler will need to be more complex.</p> |
| 170 <p>Once you’ve implemented a message handler and set up the environment | 162 <p>Once you’ve implemented a message handler and set up the environment |
| 171 variables as described above, you can check the JavaScript console to see | 163 variables as described above, you can check the JavaScript console to see |
| 172 output that your Native Client module prints to stdout and stderr. Keep in | 164 output that your Native Client module prints to stdout and stderr. Keep in |
| 173 mind that your module makes a call to PostMessage() every time it flushes | 165 mind that your module makes a call to PostMessage() every time it flushes |
| 174 stdout or stderr. Your application’s performance will degrade considerabl
y | 166 stdout or stderr. Your application’s performance will degrade considerabl
y |
| 175 if your module prints and flushes frequently, or if it makes frequent Pepper | 167 if your module prints and flushes frequently, or if it makes frequent Pepper |
| 176 calls to begin with (e.g., to render).</p> | 168 calls to begin with (e.g., to render).</p> |
| 177 </li> | 169 </li> |
| 178 </ol> | 170 </ol> |
| 179 </section></section><section id="logging-calls-to-pepper-interfaces"> | |
| 180 <h3 id="logging-calls-to-pepper-interfaces">Logging calls to Pepper interfaces</
h3> | 171 <h3 id="logging-calls-to-pepper-interfaces">Logging calls to Pepper interfaces</
h3> |
| 181 <p>You can log all Pepper calls your module makes by passing the following flags | 172 <p>You can log all Pepper calls your module makes by passing the following flags |
| 182 to Chrome on startup:</p> | 173 to Chrome on startup:</p> |
| 183 <pre class="prettyprint"> | 174 <pre class="prettyprint"> |
| 184 --vmodule=ppb*=4 --enable-logging=stderr | 175 --vmodule=ppb*=4 --enable-logging=stderr |
| 185 </pre> | 176 </pre> |
| 186 <p>The <code>vmodule</code> flag tells Chrome to log all calls to C Pepper inter
faces that | 177 <p>The <code>vmodule</code> flag tells Chrome to log all calls to C Pepper inter
faces that |
| 187 begin with “ppb” (that is, the interfaces that are implemented by th
e browser | 178 begin with “ppb” (that is, the interfaces that are implemented by th
e browser |
| 188 and that your module calls). The <code>enable-logging</code> flag tells Chrome t
o log | 179 and that your module calls). The <code>enable-logging</code> flag tells Chrome t
o log |
| 189 the calls to stderr.</p> | 180 the calls to stderr.</p> |
| 190 </section><section id="debugging-with-visual-studio"> | 181 <h3 id="debugging-with-visual-studio"><span id="visual-studio"></span>Debugging
with Visual Studio</h3> |
| 191 <span id="visual-studio"></span><h3 id="debugging-with-visual-studio"><span id="
visual-studio"></span>Debugging with Visual Studio</h3> | |
| 192 <p>If you develop on a Windows platform you can use the <a class="reference inte
rnal" href="/native-client/devguide/devcycle/vs-addin.html"><em>Native Client Vi
sual | 182 <p>If you develop on a Windows platform you can use the <a class="reference inte
rnal" href="/native-client/devguide/devcycle/vs-addin.html"><em>Native Client Vi
sual |
| 193 Studio add-in</em></a> to write and debug your code. The add-in defines new | 183 Studio add-in</em></a> to write and debug your code. The add-in defines new |
| 194 project platforms that let you run your module in two different modes: As a | 184 project platforms that let you run your module in two different modes: As a |
| 195 Pepper plugin and as a Native Client module. When running as a Pepper plugin | 185 Pepper plugin and as a Native Client module. When running as a Pepper plugin |
| 196 you can use the built-in Visual Studio debugger. When running as a Native | 186 you can use the built-in Visual Studio debugger. When running as a Native |
| 197 Client module Visual Studio will launch an instance of nacl-gdb for you and | 187 Client module Visual Studio will launch an instance of nacl-gdb for you and |
| 198 link it to the running code.</p> | 188 link it to the running code.</p> |
| 199 </section><section id="debugging-with-nacl-gdb"> | 189 <h3 id="debugging-with-nacl-gdb"><span id="using-gdb"></span>Debugging with nacl
-gdb</h3> |
| 200 <span id="using-gdb"></span><h3 id="debugging-with-nacl-gdb"><span id="using-gdb
"></span>Debugging with nacl-gdb</h3> | |
| 201 <p>The Native Client SDK includes a command-line debugger that you can use to | 190 <p>The Native Client SDK includes a command-line debugger that you can use to |
| 202 debug Native Client modules. The debugger is based on the GNU debugger <a class=
"reference external" href="http://www.gnu.org/software/gdb/">gdb</a>, and is loc
ated at | 191 debug Native Client modules. The debugger is based on the GNU debugger <a class=
"reference external" href="http://www.gnu.org/software/gdb/">gdb</a>, and is loc
ated at |
| 203 <code>toolchain/<platform>_x86_newlib/bin/x86_64-nacl-gdb</code> (where <e
m><platform></em> | 192 <code>toolchain/<platform>_x86_newlib/bin/x86_64-nacl-gdb</code> (where <e
m><platform></em> |
| 204 is the platform of your development machine: <code>win</code>, <code>mac</code>,
or | 193 is the platform of your development machine: <code>win</code>, <code>mac</code>,
or |
| 205 <code>linux</code>).</p> | 194 <code>linux</code>).</p> |
| 206 <p>Note that this same copy of GDB can be used to debug any NaCl program, | 195 <p>Note that this same copy of GDB can be used to debug any NaCl program, |
| 207 whether built using newlib or glibc for x86-32, x86-64 or ARM. In the SDK, | 196 whether built using newlib or glibc for x86-32, x86-64 or ARM. In the SDK, |
| 208 <code>i686-nacl-gdb</code> is an alias for <code>x86_64-nacl-gdb</code>, and the
<code>newlib</code> | 197 <code>i686-nacl-gdb</code> is an alias for <code>x86_64-nacl-gdb</code>, and the
<code>newlib</code> |
| 209 and <code>glibc</code> toolchains both contain the same version of GDB.</p> | 198 and <code>glibc</code> toolchains both contain the same version of GDB.</p> |
| 210 <section id="debugging-pnacl-pexes-with-pepper-35"> | 199 <h4 id="debugging-pnacl-pexes-with-pepper-35"><span id="debugging-pnacl-pexes"><
/span>Debugging PNaCl pexes (with Pepper 35+)</h4> |
| 211 <span id="debugging-pnacl-pexes"></span><h4 id="debugging-pnacl-pexes-with-peppe
r-35"><span id="debugging-pnacl-pexes"></span>Debugging PNaCl pexes (with Pepper
35+)</h4> | |
| 212 <p>If you want to use GDB to debug a program that is compiled with the PNaCl | 200 <p>If you want to use GDB to debug a program that is compiled with the PNaCl |
| 213 toolchain, you must have a copy of the pexe from <strong>before</strong> running | 201 toolchain, you must have a copy of the pexe from <strong>before</strong> running |
| 214 <code>pnacl-finalize</code>. The <code>pnacl-finalize</code> tool converts LLVM
bitcode | 202 <code>pnacl-finalize</code>. The <code>pnacl-finalize</code> tool converts LLVM
bitcode |
| 215 to the stable PNaCl bitcode format, but it also strips out debug | 203 to the stable PNaCl bitcode format, but it also strips out debug |
| 216 metadata, which we need for debugging. In this section we’ll give the | 204 metadata, which we need for debugging. In this section we’ll give the |
| 217 LLVM bitcode file a <code>.bc</code> file extension, and the PNaCl bitcode file | 205 LLVM bitcode file a <code>.bc</code> file extension, and the PNaCl bitcode file |
| 218 a <code>.pexe</code> file extension. The actual extension should not matter, but | 206 a <code>.pexe</code> file extension. The actual extension should not matter, but |
| 219 it helps distinguish between the two types of files.</p> | 207 it helps distinguish between the two types of files.</p> |
| 220 <p><strong>Note</strong> unlike the finalized copy of the pexe, the non-finalize
d debug copy | 208 <p><strong>Note</strong> unlike the finalized copy of the pexe, the non-finalize
d debug copy |
| 221 is not considered stable. This means that a debug copy of the PNaCl | 209 is not considered stable. This means that a debug copy of the PNaCl |
| (...skipping 28 matching lines...) Expand all Loading... |
| 250 your local web server serves files from.</p> | 238 your local web server serves files from.</p> |
| 251 <p>When you run Chrome with <code>--enable-nacl-debug</code>, Chrome will transl
ate | 239 <p>When you run Chrome with <code>--enable-nacl-debug</code>, Chrome will transl
ate |
| 252 and run the <code>debug_version.bc</code> instead of <code>release_version.pexe<
/code>. | 240 and run the <code>debug_version.bc</code> instead of <code>release_version.pexe<
/code>. |
| 253 Once the debug version is loaded, you are ready to <a class="reference internal"
href="#running-nacl-gdb"><em>run nacl-gdb</em></a></p> | 241 Once the debug version is loaded, you are ready to <a class="reference internal"
href="#running-nacl-gdb"><em>run nacl-gdb</em></a></p> |
| 254 <p>Whether you publish the NMF file containing the debug URL to the release | 242 <p>Whether you publish the NMF file containing the debug URL to the release |
| 255 web server, is up to you. One reason to avoid publishing the debug URL | 243 web server, is up to you. One reason to avoid publishing the debug URL |
| 256 is that it is only guaranteed to work for the Chrome version that matches | 244 is that it is only guaranteed to work for the Chrome version that matches |
| 257 the SDK version. Developers who may have left the <code>--enable-nacl-debug</cod
e> | 245 the SDK version. Developers who may have left the <code>--enable-nacl-debug</cod
e> |
| 258 flag turned on may end up loading the debug copy of your application | 246 flag turned on may end up loading the debug copy of your application |
| 259 (which may or may not work, depending on their version of Chrome).</p> | 247 (which may or may not work, depending on their version of Chrome).</p> |
| 260 </section><section id="debugging-pnacl-pexes-with-older-pepper-toolchains"> | |
| 261 <h4 id="debugging-pnacl-pexes-with-older-pepper-toolchains">Debugging PNaCl pexe
s (with older Pepper toolchains)</h4> | 248 <h4 id="debugging-pnacl-pexes-with-older-pepper-toolchains">Debugging PNaCl pexe
s (with older Pepper toolchains)</h4> |
| 262 <p>If you want to use GDB to debug a program that is compiled with the PNaCl | 249 <p>If you want to use GDB to debug a program that is compiled with the PNaCl |
| 263 toolchain, you must convert the <code>pexe</code> file to a <code>nexe</code>.
(You can skip | 250 toolchain, you must convert the <code>pexe</code> file to a <code>nexe</code>.
(You can skip |
| 264 this step if you are using the GCC toolchain, or if you are using | 251 this step if you are using the GCC toolchain, or if you are using |
| 265 pepper 35 or later.)</p> | 252 pepper 35 or later.)</p> |
| 266 <ul class="small-gap"> | 253 <ul class="small-gap"> |
| 267 <li>Firstly, make sure you are passing the <code>-g</code> <a class="reference i
nternal" href="/native-client/devguide/devcycle/building.html#compile-flags"><em
>compile option</em></a> to <code>pnacl-clang</code> to enable generating debugg
ing info. | 254 <li>Firstly, make sure you are passing the <code>-g</code> <a class="reference i
nternal" href="/native-client/devguide/devcycle/building.html#compile-flags"><em
>compile option</em></a> to <code>pnacl-clang</code> to enable generating debugg
ing info. |
| 268 You might also want to omit <code>-O2</code> from the compile-time and link-time | 255 You might also want to omit <code>-O2</code> from the compile-time and link-time |
| 269 options.</li> | 256 options.</li> |
| 270 <li><p class="first">Secondly, use <code>pnacl-translate</code> to convert your
<code>pexe</code> to one or more | 257 <li><p class="first">Secondly, use <code>pnacl-translate</code> to convert your
<code>pexe</code> to one or more |
| (...skipping 28 matching lines...) Expand all Loading... |
| 299 <li>Copy the <code>nexe</code> and <code>nmf</code> files to the location that y
our local web | 286 <li>Copy the <code>nexe</code> and <code>nmf</code> files to the location that y
our local web |
| 300 server serves files from.</li> | 287 server serves files from.</li> |
| 301 </ul> | 288 </ul> |
| 302 <aside class="note"> | 289 <aside class="note"> |
| 303 <strong>Note:</strong> If you know whether Chrome is using the x86-32 or x86-64 | 290 <strong>Note:</strong> If you know whether Chrome is using the x86-32 or x86-64 |
| 304 version of the NaCl sandbox on your system, you can translate the | 291 version of the NaCl sandbox on your system, you can translate the |
| 305 <code>pexe</code> once to a single x86-32 or x86-64 <code>nexe</code>. Otherwis
e, you | 292 <code>pexe</code> once to a single x86-32 or x86-64 <code>nexe</code>. Otherwis
e, you |
| 306 might find it easier to translate the <code>pexe</code> to both <code>nexe</code
> | 293 might find it easier to translate the <code>pexe</code> to both <code>nexe</code
> |
| 307 formats as described above. | 294 formats as described above. |
| 308 </aside> | 295 </aside> |
| 309 </section><section id="running-nacl-gdb"> | 296 <h4 id="running-nacl-gdb"><span id="id1"></span>Running nacl-gdb</h4> |
| 310 <span id="id1"></span><h4 id="running-nacl-gdb"><span id="id1"></span>Running na
cl-gdb</h4> | |
| 311 <p>Before you start using nacl-gdb, make sure you can <a class="reference intern
al" href="/native-client/devguide/devcycle/building.html"><em>build</em></a> you
r | 297 <p>Before you start using nacl-gdb, make sure you can <a class="reference intern
al" href="/native-client/devguide/devcycle/building.html"><em>build</em></a> you
r |
| 312 module and <a class="reference internal" href="/native-client/devguide/devcycle/
running.html"><em>run</em></a> your application normally. This will verify | 298 module and <a class="reference internal" href="/native-client/devguide/devcycle/
running.html"><em>run</em></a> your application normally. This will verify |
| 313 that you have created all the required <a class="reference internal" href="/nati
ve-client/devguide/coding/application-structure.html"><em>application parts</em>
</a> (.html, .nmf, and .nexe files, shared | 299 that you have created all the required <a class="reference internal" href="/nati
ve-client/devguide/coding/application-structure.html"><em>application parts</em>
</a> (.html, .nmf, and .nexe files, shared |
| 314 libraries, etc.), that your server can access those resources, and that you̵
7;ve | 300 libraries, etc.), that your server can access those resources, and that you̵
7;ve |
| 315 configured Chrome correctly to run your application. The instructions below | 301 configured Chrome correctly to run your application. The instructions below |
| 316 assume that you are using a <a class="reference internal" href="/native-client/d
evguide/devcycle/running.html#web-server"><em>local server</em></a> to run your | 302 assume that you are using a <a class="reference internal" href="/native-client/d
evguide/devcycle/running.html#web-server"><em>local server</em></a> to run your |
| 317 application; one benefit of doing it this way is that you can check the web | 303 application; one benefit of doing it this way is that you can check the web |
| 318 server output to confirm that your application is loading the correct | 304 server output to confirm that your application is loading the correct |
| 319 resources. However, some people prefer to run their application as an unpacked | 305 resources. However, some people prefer to run their application as an unpacked |
| 320 extension, as described in <a class="reference internal" href="/native-client/de
vguide/devcycle/running.html"><em>Running Native Client Applications</em></a>.</
p> | 306 extension, as described in <a class="reference internal" href="/native-client/de
vguide/devcycle/running.html"><em>Running Native Client Applications</em></a>.</
p> |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 520 <dt><code>help <command></code></dt> | 506 <dt><code>help <command></code></dt> |
| 521 <dd>print documentation for the specified gdb <command></dd> | 507 <dd>print documentation for the specified gdb <command></dd> |
| 522 <dt><code>quit</code></dt> | 508 <dt><code>quit</code></dt> |
| 523 <dd>quit gdb</dd> | 509 <dd>quit gdb</dd> |
| 524 </dl> | 510 </dl> |
| 525 <p>See the <a class="reference external" href="http://sourceware.org/gdb/current
/onlinedocs/gdb/#toc_Top">gdb documentation</a> for a | 511 <p>See the <a class="reference external" href="http://sourceware.org/gdb/current
/onlinedocs/gdb/#toc_Top">gdb documentation</a> for a |
| 526 comprehensive list of gdb commands. Note that you can abbreviate most commands | 512 comprehensive list of gdb commands. Note that you can abbreviate most commands |
| 527 to just their first letter (<code>b</code> for break, <code>c</code> for continu
e, and so on).</p> | 513 to just their first letter (<code>b</code> for break, <code>c</code> for continu
e, and so on).</p> |
| 528 <p>To interrupt execution of your module, press <Ctrl-c>. When you’r
e done | 514 <p>To interrupt execution of your module, press <Ctrl-c>. When you’r
e done |
| 529 debugging, close the Chrome window and type <code>q</code> to quit gdb.</p> | 515 debugging, close the Chrome window and type <code>q</code> to quit gdb.</p> |
| 530 </section></section></section><section id="debugging-with-other-tools"> | |
| 531 <h2 id="debugging-with-other-tools">Debugging with other tools</h2> | 516 <h2 id="debugging-with-other-tools">Debugging with other tools</h2> |
| 532 <p>If you cannot use the <a class="reference internal" href="#visual-studio"><em
>Visual Studio add-in</em></a>, or you want | 517 <p>If you cannot use the <a class="reference internal" href="#visual-studio"><em
>Visual Studio add-in</em></a>, or you want |
| 533 to use a debugger other than nacl-gdb, you must manually build your module as a | 518 to use a debugger other than nacl-gdb, you must manually build your module as a |
| 534 Pepper plugin (sometimes referred to as a “<a class="reference external" h
ref="http://www.chromium.org/nativeclient/getting-started/getting-started-backgr
ound-and-basics#TOC-Trusted-vs-Untrusted">trusted</a>” | 519 Pepper plugin (sometimes referred to as a “<a class="reference external" h
ref="http://www.chromium.org/nativeclient/getting-started/getting-started-backgr
ound-and-basics#TOC-Trusted-vs-Untrusted">trusted</a>” |
| 535 or “in-process” plugin). Pepper plugins (.DLL files on Windows; .so
files on | 520 or “in-process” plugin). Pepper plugins (.DLL files on Windows; .so
files on |
| 536 Linux; .bundle files on Mac) are loaded directly in either the Chrome renderer | 521 Linux; .bundle files on Mac) are loaded directly in either the Chrome renderer |
| 537 process or a separate plugin process, rather than in Native Client. Building a | 522 process or a separate plugin process, rather than in Native Client. Building a |
| 538 module as a trusted Pepper plugin allows you to use standard debuggers and | 523 module as a trusted Pepper plugin allows you to use standard debuggers and |
| 539 development tools on your system, but when you’re finished developing the | 524 development tools on your system, but when you’re finished developing the |
| 540 plugin, you need to port it to Native Client (i.e., build the module with one | 525 plugin, you need to port it to Native Client (i.e., build the module with one |
| 541 of the toolchains in the NaCl SDK so that the module runs in Native Client). | 526 of the toolchains in the NaCl SDK so that the module runs in Native Client). |
| 542 For details on this advanced development technique, see <a class="reference exte
rnal" href="http://www.chromium.org/nativeclient/how-tos/debugging-documentation
/debugging-a-trusted-plugin">Debugging a Trusted | 527 For details on this advanced development technique, see <a class="reference exte
rnal" href="http://www.chromium.org/nativeclient/how-tos/debugging-documentation
/debugging-a-trusted-plugin">Debugging a Trusted |
| 543 Plugin</a>. | 528 Plugin</a>. |
| 544 Note that starting with the <code>pepper_22</code> bundle, the NaCl SDK for Wind
ows | 529 Note that starting with the <code>pepper_22</code> bundle, the NaCl SDK for Wind
ows |
| 545 includes pre-built libraries and library source code, making it much easier to | 530 includes pre-built libraries and library source code, making it much easier to |
| 546 build a module into a .DLL.</p> | 531 build a module into a .DLL.</p> |
| 547 <section id="open-source-profiling-tools"> | |
| 548 <h3 id="open-source-profiling-tools">Open source profiling tools</h3> | 532 <h3 id="open-source-profiling-tools">Open source profiling tools</h3> |
| 549 <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 | 533 <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 |
| 550 <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> | 534 <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> |
| 551 and <a class="reference external" href="http://www.chromium.org/nativeclient/how
-tos/limited-profiling-with-oprofile-on-x86-64">Linux</a> | 535 and <a class="reference external" href="http://www.chromium.org/nativeclient/how
-tos/limited-profiling-with-oprofile-on-x86-64">Linux</a> |
| 552 machines.</p> | 536 machines.</p> |
| 553 </section></section></section> | 537 </section> |
| 554 | 538 |
| 555 {{/partials.standard_nacl_article}} | 539 {{/partials.standard_nacl_article}} |
| OLD | NEW |