When you have successfully built your project, you're ready to debug it. Some debugging techniques that you might use include stepping through your code as it executes, stopping your program at various code points when specific conditions are met, and reviewing and changing your data.
The IDE uses the GNU debugger (GDB), by translating each user action into a sequence of GDB commands, then processing the GDB output to show the current state of the program.
The qconn utility provides support, such as system profiling information, to the IDE. When you debug your application, you should have qconn running on your target.
The pdebug utility acts as the interface between GDB and the process being debugged. Typically, qconn starts pdebug as needed. This latter utility requires pseudo-terminals (ptys and hence, devc-pty) as well as a command shell (e.g., ksh) to be running on the target system.
To use the Debug perspective, you must use debug variants of executables. For instructions on building these executable variants, see Building an executable for debugging.
By default, lazy binding—the process by which symbol resolution isn't done until a symbol is used—is disabled (pdebug sets LD_BIND_NOW to 1). You can prevent pdebug from setting LD_BIND_NOW by specifying the -l ("el") option. This way, you'll see a different backtrace for the first function call into the shared object as the runtime linker resolves the symbol. For more information about lazy binding, see the Compiling and Debugging chapter in the QNX Neutrino Programmer's Guide.