Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 .. _devcycle-debugging: | 1 .. _devcycle-debugging: |
| 2 | 2 |
| 3 ######### | 3 ######### |
| 4 Debugging | 4 Debugging |
| 5 ######### | 5 ######### |
| 6 | 6 |
| 7 This document describes tools and techniques you can use to debug, monitor, | 7 This document describes tools and techniques you can use to debug, monitor, |
| 8 and measure your application's performance. | 8 and measure your application's performance. |
| 9 | 9 |
| 10 .. contents:: Table Of Contents | 10 .. contents:: Table Of Contents |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 61 =============== | 61 =============== |
| 62 | 62 |
| 63 Writing messages to the JavaScript console | 63 Writing messages to the JavaScript console |
| 64 ------------------------------------------ | 64 ------------------------------------------ |
| 65 | 65 |
| 66 You can send messages from your C/C++ code to JavaScript using the | 66 You can send messages from your C/C++ code to JavaScript using the |
| 67 ``PostMessage()`` call in the :doc:`Pepper messaging system | 67 ``PostMessage()`` call in the :doc:`Pepper messaging system |
| 68 <../coding/message-system>`. When the JavaScript code receives a message, its | 68 <../coding/message-system>`. When the JavaScript code receives a message, its |
| 69 message event handler can call `console.log() | 69 message event handler can call `console.log() |
| 70 <https://developer.mozilla.org/en/DOM/console.log>`_ to write the message to the | 70 <https://developer.mozilla.org/en/DOM/console.log>`_ to write the message to the |
| 71 JavaScript `console </devtools/docs/console-api>`_ in Chrome's Developer Tools. | 71 JavaScript `console </devtools/docs/console-api>`_ in Chrome's Developer Tools. |
|
JF
2014/09/03 15:22:06
Do we have an example of doing this? It's pretty m
teravest
2014/09/03 16:58:32
There are examples of using PostMessage available
JF
2014/09/03 17:03:01
Could you add one? This is a pretty basic function
| |
| 72 | 72 |
| 73 Debugging with printf | 73 Debugging with printf |
| 74 --------------------- | 74 --------------------- |
| 75 | 75 |
| 76 Your C/C++ code can perform inline printf debugging to stdout and stderr by | 76 Your C/C++ code can perform inline printf debugging to stdout and stderr by |
| 77 calling fprintf() directly, or by using cover functions like these: | 77 calling fprintf() directly, or by using cover functions like these: |
| 78 | 78 |
| 79 .. naclcode:: | 79 .. naclcode:: |
| 80 | 80 |
| 81 #include <stdio.h> | 81 #include <stdio.h> |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 107 * ``NACLLOG=c:\nacl.log`` | 107 * ``NACLLOG=c:\nacl.log`` |
| 108 | 108 |
| 109 .. Note:: | 109 .. Note:: |
| 110 :class: note | 110 :class: note |
| 111 | 111 |
| 112 **Note:** If you set the ``NACL_EXE_STDOUT``, ``NACL_EXE_STDERR``, or | 112 **Note:** If you set the ``NACL_EXE_STDOUT``, ``NACL_EXE_STDERR``, or |
| 113 ``NACLLOG`` variables to redirect output to a file, you must run Chrome with | 113 ``NACLLOG`` variables to redirect output to a file, you must run Chrome with |
| 114 the ``--no-sandbox`` flag. You must also be careful that each variable points | 114 the ``--no-sandbox`` flag. You must also be careful that each variable points |
| 115 to a different file. | 115 to a different file. |
| 116 | 116 |
| 117 Redirecting output to the JavaScript console | |
|
Mark Seaborn
2014/09/03 15:16:39
The generated HTML is checked in. :-( You need to
| |
| 118 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| 119 | |
| 120 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: | |
| 124 | |
| 125 #. Set the ``NACL_EXE_STDOUT`` and ``NACL_EXE_STDERR`` environment variables as | |
| 126 follows: | |
| 127 | |
| 128 * ``NACL_EXE_STDOUT=DEBUG_ONLY:dev://postmessage`` | |
| 129 * ``NACL_EXE_STDERR=DEBUG_ONLY:dev://postmessage`` | |
| 130 | |
| 131 These settings tell Native Client to use ``PostMessage()`` to send output | |
| 132 that your Native Client module writes to stdout and stderr to the JavaScript | |
| 133 side of your application. | |
| 134 | |
| 135 #. Register a JavaScript handler to receive messages from your Native Client | |
| 136 module: | |
| 137 | |
| 138 .. naclcode:: | |
| 139 | |
| 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 | |
| 150 #. Implement a simple JavaScript handler that logs the messages it receives to | |
| 151 the JavaScript console: | |
| 152 | |
| 153 .. naclcode:: | |
| 154 | |
| 155 function handleMessage(message_event) { | |
| 156 console.log(message_event.data); | |
| 157 } | |
| 158 | |
| 159 This handler works in the simple case where the only messages your Native | |
| 160 Client module sends to JavaScript are messages with the output from stdout | |
| 161 and stderr. If your Native Client module also sends other messages to | |
| 162 JavaScript, your handler will need to be more complex. | |
| 163 | |
| 164 Once you've implemented a message handler and set up the environment | |
| 165 variables as described above, you can check the JavaScript console to see | |
| 166 output that your Native Client module prints to stdout and stderr. Keep in | |
| 167 mind that your module makes a call to ``PostMessage()`` every time it flushes | |
| 168 stdout or stderr. Your application's performance will degrade considerably | |
| 169 if your module prints and flushes frequently, or if it makes frequent Pepper | |
| 170 calls to begin with (e.g., to render). | |
| 171 | |
| 172 Logging calls to Pepper interfaces | 117 Logging calls to Pepper interfaces |
| 173 ---------------------------------- | 118 ---------------------------------- |
| 174 | 119 |
| 175 You can log all Pepper calls your module makes by passing the following flags | 120 You can log all Pepper calls your module makes by passing the following flags |
| 176 to Chrome on startup:: | 121 to Chrome on startup:: |
| 177 | 122 |
| 178 --vmodule=ppb*=4 --enable-logging=stderr | 123 --vmodule=ppb*=4 --enable-logging=stderr |
| 179 | 124 |
| 180 | 125 |
| 181 The ``vmodule`` flag tells Chrome to log all calls to C Pepper interfaces that | 126 The ``vmodule`` flag tells Chrome to log all calls to C Pepper interfaces that |
| (...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 596 <http://www.chromium.org/nativeclient>`_ that describe how to do profiling on | 541 <http://www.chromium.org/nativeclient>`_ that describe how to do profiling on |
| 597 `64-bit Windows | 542 `64-bit Windows |
| 598 <https://sites.google.com/a/chromium.org/dev/nativeclient/how-tos/profiling-nacl -apps-on-64-bit-windows>`_ | 543 <https://sites.google.com/a/chromium.org/dev/nativeclient/how-tos/profiling-nacl -apps-on-64-bit-windows>`_ |
| 599 and `Linux | 544 and `Linux |
| 600 <http://www.chromium.org/nativeclient/how-tos/limited-profiling-with-oprofile-on -x86-64>`_ | 545 <http://www.chromium.org/nativeclient/how-tos/limited-profiling-with-oprofile-on -x86-64>`_ |
| 601 machines. | 546 machines. |
| 602 | 547 |
| 603 | 548 |
| 604 .. |menu-icon| image:: /images/menu-icon.png | 549 .. |menu-icon| image:: /images/menu-icon.png |
| 605 .. |puzzle| image:: /images/puzzle.png | 550 .. |puzzle| image:: /images/puzzle.png |
| OLD | NEW |