2012-05-02 37 views
3

我跑在gdb VLC和使用^ Z中斷它(因​​爲^ C不工作)。一些檢查堆棧幀和變量後,我試圖用「續」恢復計劃,但它不停地給我GDB給了我無限「計劃的接收信號SIGTSTP」當我嘗試恢復

Program received signal SIGTSTP, Stopped (user). 
[Switching to Thread 0x7fffd8d8e700 (LWP 19285)] 
0x00007ffff700247c in [email protected]@GLIBC_2.3.2() 
    from /lib64/libpthread.so.0 

其實只有第一行是一樣的。 LWP id在19285和19284之間循環,地址和功能也交替出現。

我想「續-a」,但它說 `-A」是所有停止模式毫無意義。

什麼是恢復兩個線程的正確方法?

回答

2

在呼籲「續」足夠的時間(每個線程一次)應恢復應用程序,什麼工作最適合我從^ Z恢復是

signal SIGCONT 

注意,試圖「續」,然後再「信號SIGCONT「可能會使gdb處於一種奇怪的狀態。

0

我相信這是因爲該SIGTSTP信號不被處理。當你恢復執行時,程序會看到信號並再次停止。

按照documentation of GDB

替代地,如果信號是零,繼續執行而不發出信號。當您的程序由於信號而停止並且在用continue命令恢復時普通看到信號時這很有用; signal 0使它在沒有信號的情況下恢復。

所以要回答你的問題,試着在GDB中執行signal 0命令,它應該恢復執行。此外,如果您不希望程序在SIGTSTP或任何信號處停止,則可以使用handle命令來定義GDB在接收信號時的行爲。參見如何做到這一點here進一步的說明。

相關問題