2017-06-05 52 views
1

我通常使用GDB(在Linux中,使用Qt Creator調試器GUI)進行調試。但是現在我有一個崩潰,在調試器下運行時拒絕發生,但在其外部運行時很容易發生。獲取堆棧跟蹤崩潰,無需在調試器中運行應用程序

在這種情況下,我該如何得到崩潰的堆棧跟蹤?

特定於linux的解決方案是可以的。

注意:我說的是僅運行調試版本,即使它在調試器外運行。

+0

1)嘗試在gdb中調試核心轉儲2)嘗試啓用gdb中的aslr(默認關閉) – ks1322

+1

@ ks1322:謝謝,aslr爲我工作。 –

+0

'重複'問題似乎是以編程方式打印堆棧跟蹤 - 這更多關於如何在覈心文件上使用GDB。投票重新開放。 –

回答

3

最簡單的方法,以確保你能獲得一個堆棧跟蹤後崩潰是在啓動程序之前運行

ulimit -c unlimited 

在您的外殼。 當程序崩潰時,這將確保允許內核產生無限大小的「核心轉儲」(對於許多發行版,默認大小爲0)。

這個核心文件可以被加載到GDB作爲gdb programfile corefile然後在命令thread apply all bt會給你堆棧跟蹤該特定崩潰(使用剛剛bt,如果你只關心崩潰線程)的所有線程。

您還可以使用pstack程序從正在運行的程序中獲取堆棧跟蹤。

+0

你是如何設法發佈你的答案的?在你的答案出現之前,我正在寫我的,並突然問題被關閉了。 FWIW,我的答案中有一些信息不可用。 –

+0

@ErikAlapää猜想在問題關閉之前我提交了我的意見,你沒有...... –

+0

子女如此;)無論如何,這些SO警官關閉相關問題有點令人討厭。我不在乎存在幾乎是重複的東西,通常情況下,存在分歧或新的發展,這些都需要新的答案。 –

相關問題