跑一个多线程的程序,知道在一个线程(不是主线程)中会产生SIGPIPE信号,并且程序会推出。所以在该线程的开始用[code]struct sigaction act; act.sa_handler=SIG_IGN; sigemptyset(&act.sa_mask); act.sa_flags=0; sigaction(SIGPIPE, &act, NULL); [/code]屏蔽了SIGPIPE 。 在gdb中运行一天左右时间后同样会停止,用gdb中gcore命令 和bt可以看见是SIGPIPE 停止了该程序。 用top 命...
一直对gdb多线程调试接触不多,最近因为工作有了一些接触,简单作点记录吧。 先介绍一下gdb多线程调试的基本命令。 info threads 显示当前可调试的所有线程,每个线程会有一个gdb为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的线程。 thread ID 切换当前调试的线程为指定ID的线程。 break thread_test.c:123 thread all在所有线程中相应的行上设置断点thread apply ID1 ID2 command 让一个或者多个线程执行...
gdb 多线程调试基本命令 实现简介 以及一个问题的解决 [email=teawater@gmail.com]teawater@gmail.com[/email] 一直对gdb多线程调试接触不多,最近因为工作有了一些接触,简单作点记录吧。 先介绍一下gdb多线程调试的基本命令。 info threads 显示当前可调试的所有线程,每个线程会有一个gdb为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的线程。 thread ID 切换...
如果目标进程已经core dump了,那么 gdb -c core xxx xxx是对应的程序文件。 如果目标进程还在运行,通常此时用于调试线程死锁的情况。有两种方法 一是 gdb -p xxx xxx是该进程的进程ID 或者用gcore xxx先获取对应进程的core,他会生成一个core文件 core.xxx 进入gdb后 (gdb) info threads 可以列出所有的线程,缺省设为当前的线程前面有一个*号 比如 gdb) info thread 9 system thread 154262 Priority:154 0xc000000...
本帖最后由 tqyou85 于 2013-09-25 10:42 编辑 ppc平台。运行一个多线程的进程,用gdb attach上去,老是提示:[code]Reading symbols from /lib/libpthread.so.0...(no debugging symbols found)...done. warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available. Loaded symbols for /lib/libpthread.so.0[/code]目标板的/lib目录下有libpthread.so与libthread_db....
http://www.ibm.com/developerworks/cn/linux/l-cn-gdbmp/index.html 觉得重要的是:*follow-fork-mode*Attach子进程 一个简单的方法可以进入attach的调试:flag = 1;while(flag);这样就会在这里while这里自动停止(好像gdb识别了这个死循环?),然后set flag = 0就可以调试进程了。 至于gdb wrapper的方式,如果需要调试exec族函数的情况下,还是可以用attach,不过注意,每次gdb attach后,都会有一个附在某一个...