2016-09-22 41 views
0

如果我們想使用gdb來調試發行版的可執行文件,我們確保使用-g進行編譯,然後使用objcopy來修改調試信息。這個調試信息可以用來在通過源文件時定位源文件行。我們什麼時候需要使用gcc/g ++來生成Map文件? 「-g」足以進行調試?

但是當/爲什麼我們還需要生成Map文件時,gdb的任何需求或能力都依賴於Map文件?

謝謝。

+0

_use objcopy修剪調試信息_ - 這是做什麼? –

+0

@MaximEgorushkin他可能意味着'strip -g'和單獨的debuginfo文件:https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html –

+0

@employedrussian這些功能最近才被添加到strip中。使用objcopy,您可以將調試部分提取到單獨的文件中,將其從源代碼可執行文件中刪除,然後添加一個部分,告訴像gdb這樣的文件名以查找符號。 – kfsone

回答

1

但是當/爲什麼我們還需要生成Map文件時,gdb的任何需求或能力都依賴於Map文件?

假設你正在談論的連接-M(同義詞--print-map)和-Map選項,這些都是爲了告訴你什麼代碼/數據被拉入您的二進制文件(爲什麼)純粹調試工具。

GDB不需要或不使用此輸出(並且輸出不容易解析,即僅供人類使用)。

更新:

何時以及我們如何使用這個映射文件?

正如我之前所說,該文件回答了這樣的問題:

  • 哪些對象或庫確實來自給定的功能?
  • .text.data節消耗多少空間?
  • 爲什麼這個特定的目標文件被選中到一個歸檔庫的鏈接中(即哪個未解決的符號導致這個目標文件被鏈接)?

當您遇到以上問題之一時,您可以使用地圖文件。如果你沒有這樣的問題,那麼你不需要地圖文件。

至於「如何」 - 只需用您最喜愛的編輯器或傳呼機閱讀。如果您有具體問題如何解釋那裏的特定行,問一個單獨的具體問題。

+0

那麼我們何時以及如何使用這個地圖文件呢?我沒有從谷歌找到線索。謝謝! –

相關問題