運行時檢查生成的核心文件我有一個程序myprog
這是我一直的valgrind下運行:如何計劃下的valgrind
/usr/bin/valgrind --tool=massif --tool=memcheck --leak-check=yes --track-origins=yes --log-file=/tmp/valgrind%p /opt/bin/myprog
我不知道到底要怎樣的valgrind下工作的細節但是當以這種方式運行時,我看到valgrind
有一個pid,但是myprog
沒有。因此,我認爲valgrind在相同的進程空間運行myprog
,並使用一些魔法來加載目標程序。
myprog
似乎已經命中assert()
並且已生成核心文件。我想使用GDB來檢查這個核心文件,所以我可以深入探究assert()
的原因。我試圖弄清楚如何從myprog中加載符號來使用GDB。
如果我使用file valgrind
,那麼這只是如果我使用file myprog
,則核心文件(通過Valgrind的產生)將不匹配的可執行文件(MYPROG)加載的valgrind符號和myprog
什麼。
有什麼方法可以告訴GDB,儘管這裏的「主機」過程是valgrind
,我們也想加載myprog
符號,因爲這是我們真正感興趣的程序嗎?
通過GDB documentation翻看,我猜我需要類似add-symbol-file filename address
,但我不知道如何找出地址是什麼。
是的,你是絕對正確的。我在Ubuntu下獲得與您類似的簡單測試可執行文件相同的結果。不幸的是,我所擁有的系統是一個專有的嵌入式(基於Linux)系統,其中包含有趣的GDB封裝和一些額外的核心和口哨,用於其核心設備。我將不得不深入研究... –
請注意,您也可以使用gdb + vgdb來調試在Valgrind下運行的應用程序(請參閱http://www.valgrind.org/docs/manual/manual-core-adv html的#手動芯adv.gdbserver)。附註:您在命令行中指定了2個工具,但只有一個將被激活。 – phd