2010-12-01 51 views
1

我一直在調試GDB(C代碼)。問題是如果我運行我的應用程序,如果它崩潰,控制回到main()(應用程序重新啓動)。因此不知道它在哪裏崩潰。所以我花了很多時間來完成每個功能。幫助gdb調試崩潰日誌記錄

我想知道是否有無論如何可以啓用日誌,這將生成崩潰前的最後一行執行。這只是我的假設,如果還有其他更簡單的方法,請讓我知道,這將爲我節省大量時間!

此外,如果gdb生成一個日誌的路徑是哪裏?

在此先感謝。

+2

你能定義「崩潰」嗎?如果有一個未處理的信號(例如SIGSEGV),GDB應該攔截它並立即停止,但是這聽起來並非如此,因此您必須以不同的方式「崩潰」。 – 2010-12-01 04:26:45

回答

3

這個問題是一個小我不清楚,但我會採取刺傷:

如果您GDB連接到崩潰時的崩潰進程,崩潰,應停止該程序,並把你回來在(gdb)提示。如果你輸入bt,你應該看到堆棧。

如果你沒有附加GDB,然後this answer to a related question可能會有所幫助。 (簡而言之,也許您希望系統在程序崩潰時創建核心轉儲,核心轉儲只是一個包含大量關於崩潰進程的信息的文件,您可以使用帶有核心轉儲的GDB來查看堆棧。 )

如果你不知道,發佈你在屏幕上看到這種情況時,我們會猜測。

在任何情況下,程序絕對不應該在main()重新開始。追查爲什麼發生這種情況以及發生了什麼似乎是值得的。控制真的跳到main在相同的過程,而不是另一個進程以某種方式自動啓動?

0

在gdb模式下運行你的程序。

$ gdb ./myProgram 


將斷點設置爲預期位置。

$ break functionName 


或設置中斷點爲特定行號。

$ break 15 


啓動執行

$ r 


步驟進入或通過的'走出執行或 'n' 個

$ s 


一旦程序崩潰,做'bt'用於回溯。

$ bt 


您可以通過'上' & '向下'命令

$ up 


上去,在您的跟蹤下來也可以採取另一種方法。以「核心」作爲核心轉儲文件的調試程序。

$ gdb executableFilename core 
$ bt