1. 程式人生 > >使用符號表除錯release程式

使用符號表除錯release程式

    原文地址:http://blog.csdn.net/jmflovezlf/article/details/16589841

    

    如果要生成單獨的除錯資訊檔案,命令如下:

objcopy –only-keep-debug foo foo.dbg

    如果要去除除錯資訊(還可以使用strip命令),命令如下:

objcopy --strip-debug foo foo.no_dbg
注意:不從原始檔拷貝除錯符號資訊和相關的段。對使用-g編譯生成的可執行檔案執行之後,生成的結果幾乎和不用-g進行編譯生成可執行檔案一樣)。

    如果要新增除錯資訊檔案連結,命令如下:

objcopy --add-gnu-debuglink=foo.dbg foo

    確認除錯資訊檔案連結,命令如下:
objdump -s -j .gnu_debuglink foo

    除錯release程式前首先需要從debug版本中獲取符號表資訊,這個是通過objcopy這個利器,命令如下:
objcopy --only-keep-debug debug info.dbg

注意:其中debug是帶有符號表的可執行程式,info.dbg是儲存符號表的檔案。


    在使用gdb除錯release程式的時候,使用--symbol命令來載入前面生成的符號表,命令如下:

[[email protected]_192 debug]#gdb -q --symbol=info.dbg --exec=release
注意:其中--exec選項指定的release就是release版本的程式,這個程式原本是沒有符號表資訊的。

    在釋出程式的時候,為了壓縮程式,可以先使用-g引數編譯程式,然後objcopy --strip-debug去除符號編譯資訊,同時儘量不要開啟優化,這樣便於結合符號資訊除錯程式碼,同時便於dump core檔案的分析。