2009-01-07 121 views

回答

15

只需使用常規中斷Ctrl - c將工作得很好。 GDB只是將SIGINT轉發到調試過程,然後死亡。 GDB會捕獲非標準的出口並在那裏破壞進程,所以你仍然可以檢查所有線程,它們的堆棧和變量的當前值。這工作正常,但你會更好使用斷點。唯一一次我發現自己這樣做,如果我覺得我已經陷入某種無限循環。

+0

我試過^ C但它沒有工作我無法在提示符上鍵入任何內容。此外,該程序是多線程的用戶界面,這可能是問題嗎? – anand 2009-01-07 19:25:16

+0

Ctrl-C作爲我想要的炒作,但我不會在GDB 7.7.1上重現這一點:該過程似乎沒有得到Ctrl-C並死亡。它只被GDB阻止,沒有被殺害。再次點擊`c`或`detach`使它從停止的地方繼續。 – 2015-05-08 10:45:03

4

只需鍵入BREAK,不帶任何參數。

分段,當不帶任何參數調用時,斷裂設置在下一個指令斷點所選擇的堆棧幀

4

啓動一個外殼將要執行,用ps找到進程ID,並通過使用發送SIGSTOP或SIGINT kill命令(例如kill -INT pid)。

10

GUI應用程序不會對^ C和^做出反應,並且不會影響控制檯應用程序的操作。這段日子以來最不平凡的項目往往是在GUI應用程序主要用於GUI應用程序或庫,你有兩種選擇:

  1. 發送SIGSTOP從單獨的終端中的應用。這很麻煩。

  2. 如果在GDB提示符下按^ C或^ Break,GDB將終止,但應用程序仍將繼續運行。然後,您可以再次運行GDB以使用-p命令行開關附加到它。這會失去調試器狀態。

在這兩種情況下,你可能會有所幫助:tasklist | grepProcessName| sed -e 's/ProcessName*\([0-9]*\).*/gdbModuleName-pid=\1/' > rungdb.sh您可以修改這個用在shell腳本,生成文件或發送的信號,而不是附加GDB的。

info threads將幫助你找出你想看的線程。然後使用threadThreadNumber切換到它。

相關問題