我有一个程序,当我从终端(没有GDB)运行打印一些输出。假定输出看起来像GDB报告崩溃,但程序运行良好
welcome to CMP simulator
initializing
finish initialization
now run
goodbye
现在,当我想用GDB,程序给出一个PID,我用它来连接到GDB。假设程序的输出现在看起来像
welcome to CMP simulator
gdb - 5932 (Run this command on another terminal and type "continue" at GDB prompt)
虽然程序等待SIGCONT,我其它终端上运行gdb - 5932
。当我输入“continue”时,GDB报告这样的崩溃:
Loaded symbols for /home/mahmood/results/temp/libCMP_iface_gcc.so
0x00007fd3a499fb7b in raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/pt-raise.c:42
42 ../nptl/sysdeps/unix/sysv/linux/pt-raise.c: No such file or directory.
(gdb) c
Continuing.
Program received signal SIGSTOP, Stopped (signal).
[Switching to Thread 0x7fd3a343f700 (LWP 21014)]
0x00007fd3a408e303 in __GI___poll (fds=<optimized out>, nfds=<optimized out>, timeout=<optimized out>)
at ../sysdeps/unix/sysv/linux/poll.c:87
87 ../sysdeps/unix/sysv/linux/poll.c: No such file or directory.
(gdb) bt
#0 0x00007fd3a408e303 in __GI___poll (fds=<optimized out>, nfds=<optimized out>, timeout=<optimized out>)
at ../sysdeps/unix/sysv/linux/poll.c:87
#1 0x00007fd3a4c0fc4c in ??() from /home/mahmood/simics-3.0.31/amd64-linux/bin/libsimics-common.so
#2 0x00007fd3a4997e9a in start_thread (arg=0x7fd3a343f700) at pthread_create.c:308
#3 0x00007fd3a4099cbd in clone() at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#4 0x0000000000000000 in ??()
(gdb)
此时,程序仍在等待SIGCONT。
回溯的含义是什么?如您在没有GDB的情况下可以看到的,程序在输出上打印更多行。但是GDB显示崩溃。我的猜测是创建线程存在问题。
任何反馈意见。
UPDATE:
如果我跑了 “继续”,我再次看到GDB
(gdb) c
Continuing.
Program received signal SIGSTOP, Stopped (signal).
0x00007f09b653c303 in __GI___poll (fds=<optimized out>, nfds=<optimized out>, timeout= <optimized out>)
at ../sysdeps/unix/sysv/linux/poll.c:87
87 in ../sysdeps/unix/sysv/linux/poll.c
(gdb) bt
#0 0x00007f09b653c303 in __GI___poll (fds=<optimized out>, nfds=<optimized out>, timeout=<optimized out>)
at ../sysdeps/unix/sysv/linux/poll.c:87
#1 0x00007f09b70bdc4c in ??() from /home/mahmood/simics-3.0.31/amd64-linux/bin/libsimics-common.so
#2 0x00007f09b6e45e9a in start_thread (arg=0x7f09b58ed700) at pthread_create.c:308
#3 0x00007f09b6547cbd in clone() at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#4 0x0000000000000000 in ??()
(gdb)
相同输出的系统,Ubuntu的12.04 AMD64
它不显示崩溃GDB是固定的,它显示了一个信号 - 这可能完全适合您的应用程序。如果程序使用CTRL-Z停止,SIGSTOP会发生什么,但也可以用其他方式完成。 – 2013-02-14 16:43:21
我必须说,在另一台机器上没有问题,gdb成功发送SIGCONT。因此可以看到该程序的其他输出。为什么现在不能继续? – mahmood 2013-02-14 16:46:13
尝试另一种继续。这可能是某种竞争条件,或者某种 - 不知道你使用的机器等等,这很难说。但要明确,这是一个信号,但它不是一个崩溃! – 2013-02-14 16:50:37