1. 程式人生 > >strip後除錯符號單獨儲存檔案

strip後除錯符號單獨儲存檔案


作業系統環境
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時束手無策了。