我有一個應用程序,它分派一個子進程。GDB回溯子進程
子進程做了一些工作,並在中間的某個地方給出了分段錯誤。我用GDB調試此,我用:
set follow-fork-mode child
我還設置一個斷點孩子中的功能。但GDB不會在我的斷點處停下來。
另外,父進程處理seg-fault,所以我不得不按ctrl-c退出。然後,當我使用backtrace
打印堆棧我的一切是
沒有堆棧
爲什麼斷點未設置,爲什麼我沒有拿到堆棧?
我有一個應用程序,它分派一個子進程。GDB回溯子進程
子進程做了一些工作,並在中間的某個地方給出了分段錯誤。我用GDB調試此,我用:
set follow-fork-mode child
我還設置一個斷點孩子中的功能。但GDB不會在我的斷點處停下來。
另外,父進程處理seg-fault,所以我不得不按ctrl-c退出。然後,當我使用backtrace
打印堆棧我的一切是
沒有堆棧
爲什麼斷點未設置,爲什麼我沒有拿到堆棧?
爲什麼斷點未設置
斷點是設定,但它沒有被擊中,因爲...
,爲什麼我沒有得到堆棧?
......你明顯在調試錯誤的過程。
隨着set follow-fork-mode child
,GDB將跟隨第一你創建的孩子。也許你創造了不止一個?
調試此方法的一種方法是使用signal
或sigaction
建立SIGSEGV
處理程序。
在處理程序,做到這一點:
void handler(int signo)
{
int i = 1;
fprintf(stderr, "pid=%d, got signal=%d\n", getpid(), signo);
while (i) { }
}
一旦你看到的信息打印出來,在另一個窗口:
gdb /proc/<pid>/exe <pid>
(gdb) where
謝謝先生。 – 2016-01-19 21:54:52
是你所撰寫的孩子計劃? – sirgeorge 2012-03-04 05:00:50
不,但我確實有我的來源。 – broun 2012-03-04 05:09:26
你可以在調試模式下從源代碼構建它(孩子)嗎? – sirgeorge 2012-03-04 05:12:27