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 |