如果我們想使用gdb來調試發行版的可執行文件,我們確保使用-g進行編譯,然後使用objcopy來修改調試信息。這個調試信息可以用來在通過源文件時定位源文件行。我們什麼時候需要使用gcc/g ++來生成Map文件? 「-g」足以進行調試?
但是當/爲什麼我們還需要生成Map文件時,gdb的任何需求或能力都依賴於Map文件?
謝謝。
如果我們想使用gdb來調試發行版的可執行文件,我們確保使用-g進行編譯,然後使用objcopy來修改調試信息。這個調試信息可以用來在通過源文件時定位源文件行。我們什麼時候需要使用gcc/g ++來生成Map文件? 「-g」足以進行調試?
但是當/爲什麼我們還需要生成Map文件時,gdb的任何需求或能力都依賴於Map文件?
謝謝。
但是當/爲什麼我們還需要生成Map文件時,gdb的任何需求或能力都依賴於Map文件?
假設你正在談論的連接-M
(同義詞--print-map
)和-Map
選項,這些都是爲了告訴你什麼代碼/數據被拉入您的二進制文件(爲什麼)純粹調試工具。
GDB不需要或不使用此輸出(並且輸出不容易解析,即僅供人類使用)。
更新:
何時以及我們如何使用這個映射文件?
正如我之前所說,該文件回答了這樣的問題:
.text
或.data
節消耗多少空間?當您遇到以上問題之一時,您可以使用地圖文件。如果你沒有這樣的問題,那麼你不需要地圖文件。
至於「如何」 - 只需用您最喜愛的編輯器或傳呼機閱讀。如果您有具體問題如何解釋那裏的特定行,做問一個單獨的具體問題。
那麼我們何時以及如何使用這個地圖文件呢?我沒有從谷歌找到線索。謝謝! –
_use objcopy修剪調試信息_ - 這是做什麼? –
@MaximEgorushkin他可能意味着'strip -g'和單獨的debuginfo文件:https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html –
@employedrussian這些功能最近才被添加到strip中。使用objcopy,您可以將調試部分提取到單獨的文件中,將其從源代碼可執行文件中刪除,然後添加一個部分,告訴像gdb這樣的文件名以查找符號。 – kfsone