2013-02-14 98 views
2

我有一個程序,當我從終端(沒有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

+0

它不顯示崩潰GDB是固定的,它顯示了一個信號 - 這可能完全適合您的應用程序。如果程序使用CTRL-Z停止,SIGSTOP會發生什麼,但也可以用其他方式完成。 – 2013-02-14 16:43:21

+0

我必須說,在另一臺機器上沒有問題,gdb成功發送SIGCONT。因此可以看到該程序的其他輸出。爲什麼現在不能繼續? – mahmood 2013-02-14 16:46:13

+0

嘗試另一種繼續。這可能是某種競爭條件,或者某種 - 不知道你使用的機器等等,這很難說。但要明確,這是一個信號,但它不是一個崩潰! – 2013-02-14 16:50:37

回答

0

GDB沒有顯示崩潰,一個SIGSTOP只意味着程序停止了,你只需要使用gdb命令'continue'繼續它,或者只是要求GDB使用'sig SIGCONT'發送信號。

I h我幫你。

0

PT-raise.c:沒有這樣的文件或目錄

這個錯誤可以通過重建來源