2015-02-11 42 views
1

如果在編譯C文件時向GCC提供默認選項(-g),那麼如何從Linux上的可執行文件轉儲debug_loc部分?我使用的是linux實用程序readelf轉儲可執行文件中的debug_loc部分

GCC默認生成DWARF4格式的DWARF信息,所以如果我傳遞-g-dwarf2,我可以看到.debug_loc部分,但如果使用默認選項生成信息時如何檢查該部分,因爲我沒有看到該部分傾倒?

+0

你使用最新版本的binutils嗎?在Ubuntu 14.04上,我可以使用「gcc -g test.c -o test」構建可執行文件。然後執行「readelf --debug-dump = info test」並查看它的DWARF 4,然後執行readelf --debug-dump = decodedline測試並獲取.debug_line部分的內容。 – dbrank0 2015-02-11 07:09:34

+0

ohh我不知道這個選項。請解釋更多關於這個,並把它放在答案我會接受它非常感謝! – 2015-02-11 07:12:46

回答

0

您是否使用binutils的最新版本?在Ubuntu 14.04上,我可以使用「gcc -g test.c -o test」構建可執行文件。

隨着「readelf --debug突降=信息測試」我可以證實它的使用矮4

之後,你有(至少)兩種方式來轉儲.debug_line節的內容。

readelf --debug轉儲= decodedline測試

這將轉儲解碼行號信息。你直接得到線==地址映射。

還有:

readelf --debug突降= rawline測試

這讓你生debug_line內容。

+0

等一下。這是給我debug_line部分的內容,而不是debug_loc?連接/差異是什麼? – 2015-02-11 10:05:07

+0

對不起。我的錯。我以爲你在尋找debug_line部分。使用--debug-dump = loc來獲取.debug_loc。 – dbrank0 2015-02-11 10:33:11

+0

僅供參考:對於簡單的可執行文件(一個函數),由於某種原因它不會生成debug_loc段。對於更復雜的,它確實如此。滑稽。 – dbrank0 2015-02-11 10:39:14