我通常使用GDB(在Linux中,使用Qt Creator調試器GUI)進行調試。但是現在我有一個崩潰,在調試器下運行時拒絕發生,但在其外部運行時很容易發生。獲取堆棧跟蹤崩潰,無需在調試器中運行應用程序
在這種情況下,我該如何得到崩潰的堆棧跟蹤?
特定於linux的解決方案是可以的。
注意:我說的是僅運行調試版本,即使它在調試器外運行。
我通常使用GDB(在Linux中,使用Qt Creator調試器GUI)進行調試。但是現在我有一個崩潰,在調試器下運行時拒絕發生,但在其外部運行時很容易發生。獲取堆棧跟蹤崩潰,無需在調試器中運行應用程序
在這種情況下,我該如何得到崩潰的堆棧跟蹤?
特定於linux的解決方案是可以的。
注意:我說的是僅運行調試版本,即使它在調試器外運行。
最簡單的方法,以確保你能獲得一個堆棧跟蹤後崩潰是在啓動程序之前運行
ulimit -c unlimited
在您的外殼。 當程序崩潰時,這將確保允許內核產生無限大小的「核心轉儲」(對於許多發行版,默認大小爲0)。
這個核心文件可以被加載到GDB作爲gdb programfile corefile
然後在命令thread apply all bt
會給你堆棧跟蹤該特定崩潰(使用剛剛bt
,如果你只關心崩潰線程)的所有線程。
您還可以使用pstack
程序從正在運行的程序中獲取堆棧跟蹤。
你是如何設法發佈你的答案的?在你的答案出現之前,我正在寫我的,並突然問題被關閉了。 FWIW,我的答案中有一些信息不可用。 –
@ErikAlapää猜想在問題關閉之前我提交了我的意見,你沒有...... –
子女如此;)無論如何,這些SO警官關閉相關問題有點令人討厭。我不在乎存在幾乎是重複的東西,通常情況下,存在分歧或新的發展,這些都需要新的答案。 –
1)嘗試在gdb中調試核心轉儲2)嘗試啓用gdb中的aslr(默認關閉) – ks1322
@ ks1322:謝謝,aslr爲我工作。 –
'重複'問題似乎是以編程方式打印堆棧跟蹤 - 這更多關於如何在覈心文件上使用GDB。投票重新開放。 –