作業系統環境
linux ubuntu 3.2.0-24-generic-pae #37-ubuntu smp wed apr 25 10:47:59 utc 2012 i686 i686 i386 gnu/linux
背景:生成release版程式時,進行strip操作,但是strip後,可執行程式中不再有除錯資訊和一些符號表。當出現問題時,排查帶來了很大的難題。
俗話講:strip的越爽,出現問題時,頭疼的越厲害。
目的:為了兼顧,既將符號表去掉了,出問題時又能用符號表。採用符號表和可執行程式分離的方式。
編譯程式:
gcc -g test.c -o test
製作符號表
objcopy --only-keep-debug test test.dbg
test.dbg:產生的符號表檔案
可執行程式strip
strip test -o test_release
test_release:經過strip後的程式
已經strip程式新增符號表連線
objcopy --add-gnu-debuglink=test.dbg test_release
test_release:檔案中已經包含了符號表名字連線
這裡test_release就是strip後的可執行程式,當程式發生異常產生core檔案後,將test.dbg放到test_release同目錄下,
可以直接gdb test_strip core檢視段錯誤位置,也可以gdb掛載程式,這是會顯示更多的資訊。
如果對庫檔案進行strip,可以將除錯資訊放在'/usr/lib/debug'
放在哪個目錄可以在gdb模式下,使用命令:show debug-file-directory檢視
這裡是在ubuntu平台下試過的。這個方法可以用於動態庫和可執行程式,靜態庫是不允許strip的,因為他會和最終的可執行程式一起strip。
在咱們部門的主程式中,這個方法應該是沒問題,有興趣的同事可以嘗試一下,讓主程式也實現這個功能,每次出release程式的時候,同時出乙個符號表,
這樣就不會再gdb時束手無策了。
Visual Studio除錯之符號檔案
前面在不能設定斷點的檢查步驟和visual studio除錯之斷點高階篇提到了除錯符號檔案及其作用,這篇文章我將要介紹除錯符號檔案的一些用法,如果你已經很熟悉除錯檔案的話,盡可以跳過本文。1.設定斷點,因為偵錯程式需要符號檔案提供的對映關係,將源 行的行號轉換成對應的機器 的位址。2.檢視程式堆疊,...
GDB符號偵錯程式 一
gdb簡單使用 編譯程式時,使用gcc ggdb3 o test test.c可以最大限度的包含除錯資訊。gdb test 然後會出現一串提示,無非就是寫授權介紹類的.然後就是提示符 gdb gdb run 設定斷點後,輸入run直接執行,並且在斷點處停止 gdb break main 在main函...
GDB符號偵錯程式 二
gdb watch 表示式設定好檢視的表示式,則可以使程式在表示式成立時終止執行 eg gdb watch counter 15 gdb breaktrace gdb bt 該命令列印當前停住地方函式呼叫棧的所有資訊.gdb breaktrace gdb bt n是乙個正整數,表示可以列印棧頂上的n...