Skip Navigation Links | |
Exit Print View | |
Oracle Solaris Studio 12.3: Debugging a Program With dbx Oracle Solaris Studio 12.3 Information Library |
4. Viewing and Navigating To Code
5. Controlling Program Execution
6. Setting Breakpoints and Traces
8. Evaluating and Displaying Data
11. Debugging Multithreaded Applications
Understanding Multithreaded Debugging
Viewing the Context of Another Thread
16. Debugging Fortran Using dbx
17. Debugging a Java Application With dbx
18. Debugging at the Machine-Instruction Level
19. Using dbx With the Korn Shell
You can get an idea of how often your application creates and destroys threads by using the thr_create event and thr_exit event as in the following example:
(dbx) trace thr_create (dbx) trace thr_exit (dbx) run trace: thread created t@2 on l@2 trace: thread created t@3 on l@3 trace: thread created t@4 on l@4 trace: thr_exit t@4 trace: thr_exit t@3 trace: thr_exit t@2
The application created three threads. Note how the threads exited in reverse order from their creation, which might indicate that had the application had more threads, the threads would accumulate and consume resources.
To get more interesting information, you could try the following in a different session:
(dbx) when thr_create { echo "XXX thread $newthread created by $thread"; } XXX thread t@2 created by t@1 XXX thread t@3 created by t@1 XXX thread t@4 created by t@1
The output shows that all three threads were created by thread t@1, which is a common multi-threading pattern.
Suppose you want to debug thread t@3 from its outset. You could stop the application at the point that thread t@3 is created as follows:
(dbx) stop thr_create t@3 (dbx) run t@1 (l@1) stopped in tdb_event_create at 0xff38409c 0xff38409c: tdb_event_create : retl Current function is main 216 stat = (int) thr_create(NULL, 0, consumer, q, tflags, &tid_cons2); (dbx)
If your application occasionally spawns a new thread from thread t@5 instead of thread t@1, you could capture that event as follows:
(dbx) stop thr_create -thread t@5