breadcrumbs:
- /nativeclient
- Native Client
- /nativeclient/how-tos
- '2: How Tos'
- /nativeclient/how-tos/debugging-documentation
- Debugging Documentation
- /nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin
- Debugging a Trusted Plugin page_name: debugging-a-trusted-plugin-on-linux title: Debugging a Trusted Plugin on Linux
- Get a Chromium check-out. You can usually use the revision from the nacl-sdk DEPS file.
- You don’t need to build all of chromium, just pepper.
- Go to the src/ directory in your check-out
- type: ‘make ppapi_tests’ to build the pepper tests as well as any libraries they depend on. You’ll end up with libppapi_cpp.a and libppapi_cpp_object.a.
- Build trusted version of the code
- For a C plugin you don’t have to link against anything. ppapi C is all headers.
- For C++, you need libppapi_cpp.a and libppapi_cpp_objects.a. Link against ppapi_cpp_objects and ppapi_cpp from chrome.
- link order matters: ppapi_cpp_objects has to come before ppapi_cpp
- Be sure to specify -fno-rtti and -fPIC since chrome does not build run-time type information by default, and you’ll be generating a shared library as your plugin.
- For the linking step, be sure to specify -shared
- To load your plugin, your application will need an embed tag. For trusted plugins this should not have a “nacl” but a regular “type” attribute, for example: type="application/x-hello-world"
- Unlike with an untrusted plugin, instead of handling a onload event in the EMBED tag, you have to call moduleDidLoad() directly after the EMBED tag.
- To debug, you have to use Chromium - best is to get a waterfall for your platform build from http://build.chromium.org/f/chromium/snapshots/ You can also finish the chromium build you checked out but be prepared to wait a while. This style of debugging is not supported with Google Chrome Dev Channel
- In a shell, launch chrome with the following arguments:
- --user-data-dir=/tmp/nacl_debugging_chrome_profile
- --register-pepper-plugins="location/of/your/plugin.so;application/x-hello-world"
- --single-process
- file://location/of/your/web_page.html
- In Chrome, create a new tab and visit about:memory, this will list the pid of the plugin tab.
- You can now use gdb to attach to the pid and debug your plugin