gdb多进程/多线程调试实战
来源:互联网 发布:虚拟linux系统界面 编辑:程序博客网 时间:2024/06/08 00:23
gdb多进程调试
- set follow-fork-mode [parent|child] set detach-on-fork [on|off]
- 查询正在调试的进程:info inferiors
- 切换调试的进程: inferior +inferior number
- catch fork命令可以捕获进程的创建
- attach + pid , 可以附到一个正在运行的进程上进行调试
gdb多线程调试
- show scheduler-locking //显示当前scheduler-locking
- set scheduler-locking [on/off/step] //设置scheduler-locking
- on:只有当前调试线程运行,其他线程处于暂停状态。
- off:当前调试线程外的其他线程一直在正常运行。
- step:其他线程跟随当前调试线程运行,但具体怎么协同运行,测试中无法体现。
- 注意:set scheduler-locking要处于线程运行环境下才能生效,也就是程序已经运行并且暂停在某个断点处,否则会出现“Target ‘exec’ cannot support this command.”这样的错误;而且经过测试,设置后的scheduler-locking值在整个进程内有效,不属于某个线程。
gdb多进程/多线程调试实战例子
b@b-VirtualBox:~/Documents/temp_test$ sudo gdb ./o_multi_thread_process [sudo] password for b: GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1Copyright (C) 2014 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law. Type "show copying"and "show warranty" for details.This GDB was configured as "x86_64-linux-gnu".Type "show configuration" for configuration details.For bug reporting instructions, please see:<http://www.gnu.org/software/gdb/bugs/>.Find the GDB manual and other documentation resources online at:<http://www.gnu.org/software/gdb/documentation/>.For help, type "help".Type "apropos word" to search for commands related to "word"...Reading symbols from ./o_multi_thread_process...done.(gdb) attach 3027Attaching to program: /home/b/Documents/temp_test/o_multi_thread_process, process 3027Reading symbols from /lib/x86_64-linux-gnu/libpthread.so.0...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/libpthread-2.19.so...done.done.[New LWP 3029][Thread debugging using libthread_db enabled]Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".Loaded symbols for /lib/x86_64-linux-gnu/libpthread.so.0Reading symbols from /lib/x86_64-linux-gnu/libc.so.6...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/libc-2.19.so...done.done.Loaded symbols for /lib/x86_64-linux-gnu/libc.so.6Reading symbols from /lib64/ld-linux-x86-64.so.2...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/ld-2.19.so...done.done.Loaded symbols for /lib64/ld-linux-x86-64.so.20x00007f5c9acb8dfd in nanosleep () at ../sysdeps/unix/syscall-template.S:8181 ../sysdeps/unix/syscall-template.S: No such file or directory.(gdb) set follow-fork-mode parent (gdb) set detach-on-fork off(gdb) catch forkCatchpoint 1 (fork)(gdb) rStarting program: /home/b/Documents/temp_test/o_multi_thread_process [Thread debugging using libthread_db enabled]Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".Catchpoint 1 (forked process 3002), 0x00007ffff78b7ee4 in __libc_fork () at ../nptl/sysdeps/unix/sysv/linux/x86_64/../fork.c:130130 ../nptl/sysdeps/unix/sysv/linux/x86_64/../fork.c: No such file or directory.(gdb) info inferiors Num Description Executable * 1 process 2998 /home/b/Documents/temp_test/o_multi_thread_process (gdb) b 14Breakpoint 2 at 0x7ffff78b7f5b: file ../nptl/sysdeps/unix/sysv/linux/x86_64/../fork.c, line 14.(gdb) info breakpoints Num Type Disp Enb Address What1 catchpoint keep y fork, process 3002 catchpoint already hit 1 time2 breakpoint keep y 0x00007ffff78b7f5b in __libc_fork at ../nptl/sysdeps/unix/sysv/linux/x86_64/../fork.c:14(gdb) d 2(gdb) info breakpoints Num Type Disp Enb Address What1 catchpoint keep y fork, process 3002 catchpoint already hit 1 time(gdb) b multi_thread_process.cpp : 14Breakpoint 3 at 0x4007f4: file ./multi_thread_process.cpp, line 14.(gdb) cContinuing.[New process 3002][Thread debugging using libthread_db enabled]Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".Reading symbols from /usr/lib/debug/lib/x86_64-linux-gnu/libpthread-2.19.so...done.Reading symbols from /usr/lib/debug/lib/x86_64-linux-gnu/libc-2.19.so...done.Reading symbols from /usr/lib/debug/lib/x86_64-linux-gnu/ld-2.19.so...done.Breakpoint 3, main (argc=1, argv=0x7fffffffe598) at ./multi_thread_process.cpp:1515 if(pid != 0)(gdb) info inferiors Num Description Executable 2 process 3002 /home/b/Documents/temp_test/o_multi_thread_process * 1 process 2998 /home/b/Documents/temp_test/o_multi_thread_process (gdb) inferior 2[Switching to inferior 2 [process 3002] (/home/b/Documents/temp_test/o_multi_thread_process)][Switching to thread 2 (Thread 0x7ffff7fdf740 (LWP 3002))] 0 0x00007ffff78b7ee4 in __libc_fork () at ../nptl/sysdeps/unix/sysv/linux/x86_64/../fork.c:130130 ../nptl/sysdeps/unix/sysv/linux/x86_64/../fork.c: No such file or directory.(gdb) set scheduler-locking on(gdb) b multi_thread_process.cpp : 50Breakpoint 4 at 0x400916: multi_thread_process.cpp:50. (2 locations)(gdb) info threads Id Target Id Frame * 2 Thread 0x7ffff7fdf740 (LWP 3002) "o_multi_thread_" 0x00007ffff78b7ee4 in __libc_fork () at ../nptl/sysdeps/unix/sysv/linux/x86_64/../fork.c:130 1 Thread 0x7ffff7fdf740 (LWP 2998) "o_multi_thread_" main (argc=1, argv=0x7fffffffe598) at ./multi_thread_process.cpp:15(gdb) cContinuing.Breakpoint 3, main (argc=1, argv=0x7fffffffe598) at ./multi_thread_process.cpp:1515 if(pid != 0)(gdb) info threads Id Target Id Frame * 2 Thread 0x7ffff7fdf740 (LWP 3002) "o_multi_thread_" main (argc=1, argv=0x7fffffffe598) at ./multi_thread_process.cpp:15 1 Thread 0x7ffff7fdf740 (LWP 2998) "o_multi_thread_" main (argc=1, argv=0x7fffffffe598) at ./multi_thread_process.cpp:15(gdb) cContinuing.ProcessB: 3002 step1ProcessB: 3002 step2ProcessB: 3002 step3^CProgram received signal SIGINT, Interrupt.0x00007ffff78b7de0 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:8181 ../sysdeps/unix/syscall-template.S: No such file or directory.(gdb) info threads Id Target Id Frame * 2 Thread 0x7ffff7fdf740 (LWP 3002) "o_multi_thread_" 0x00007ffff78b7de0 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:81 1 Thread 0x7ffff7fdf740 (LWP 2998) "o_multi_thread_" main (argc=1, argv=0x7fffffffe598) at ./multi_thread_process.cpp:15(gdb) info inferiors Num Description Executable * 2 process 3002 /home/b/Documents/temp_test/o_multi_thread_process 1 process 2998 /home/b/Documents/temp_test/o_multi_thread_process (gdb) inferior 1[Switching to inferior 1 [process 2998] (/home/b/Documents/temp_test/o_multi_thread_process)][Switching to thread 1 (Thread 0x7ffff7fdf740 (LWP 2998))] 0 main (argc=1, argv=0x7fffffffe598) at ./multi_thread_process.cpp:1515 if(pid != 0)(gdb) list10 {11 int pid;12 13 pid = fork();14 15 if(pid != 0)16 processA();17 else18 processB();19 (gdb) rThe program being debugged has been started already.Start it from the beginning? (y or n) nProgram not restarted.(gdb) cContinuing.ProcessA: 2998 step1[New Thread 0x7ffff77f6700 (LWP 3017)]^CProgram received signal SIGINT, Interrupt.0x00007ffff78b7dfd in nanosleep () at ../sysdeps/unix/syscall-template.S:8181 ../sysdeps/unix/syscall-template.S: No such file or directory.(gdb) info threads Id Target Id Frame 3 Thread 0x7ffff77f6700 (LWP 3017) "o_multi_thread_" clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:81 2 Thread 0x7ffff7fdf740 (LWP 3002) "o_multi_thread_" 0x00007ffff78b7de0 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:81* 1 Thread 0x7ffff7fdf740 (LWP 2998) "o_multi_thread_" 0x00007ffff78b7dfd in nanosleep () at ../sysdeps/unix/syscall-template.S:81(gdb)
阅读全文
0 0
- gdb多进程/多线程调试实战
- GDB调试多进程、多线程
- gdb多进程多线程调试
- gdb 多进程,多线程调试
- GDB多进程多线程调试
- gdb调试多线程多进程
- gdb调试多进程,多线程
- gdb调试多进程多线程
- gdb调试多进程多线程
- gdb调试多进程多线程
- gdb调试多进程、多线程
- gdb调试多进程多线程
- gdb调试多进程多线程
- 使用gdb调试多进程多线程调试
- gdb调试多进程 gdb 多进程 多线程调试方法 gdb调试
- gdb调试多进程 gdb 多进程 多线程调试方法 gdb调试
- GDB调试信号、多进程、多线程
- gdb调试多进程和多线程命令
- spring MVC 步骤:
- mybatis错误:Invalid bound statement (not found)
- Mr.Smile填坑记——微博、微信debug、release版本切换不能分享
- POJ-2752 Seek the Name, Seek the Fame
- JavaScript定时器原理及高级使用
- gdb多进程/多线程调试实战
- node 回调函数
- HbaseTemplate进阶:利用hbase.properties文件对Hbase的集群和端口进行配置
- 洛谷 P1140 相似基因
- CC26xx SPI
- Windows64 Py-Faster-RCNN的配置
- JSP&Servlet 监听器
- Vue之实例详解
- TTS开源方案open jTalk