我嘗試使用gdb在目標上調試嵌入式應用程序。因此,在主機上運行的gdb需要帶有調試符號的二進制文件,即用-g編譯的二進制文件。在目標上,一個二進制文件的剝離副本就足夠了。在目標上,我嘗試使用不帶-g代替剝離副本編譯的二進制文件,但它不起作用。gdb:使用-g編譯的二進制文件與使用-g編譯的二進制編譯的代碼
GNU strip丟棄了目標文件中的所有符號(用-g編譯)。那麼,這不等於一個沒有-g編譯的二進制文件嗎?爲什麼它不起作用?
我嘗試使用gdb在目標上調試嵌入式應用程序。因此,在主機上運行的gdb需要帶有調試符號的二進制文件,即用-g編譯的二進制文件。在目標上,一個二進制文件的剝離副本就足夠了。在目標上,我嘗試使用不帶-g代替剝離副本編譯的二進制文件,但它不起作用。gdb:使用-g編譯的二進制文件與使用-g編譯的二進制編譯的代碼
GNU strip丟棄了目標文件中的所有符號(用-g編譯)。那麼,這不等於一個沒有-g編譯的二進制文件嗎?爲什麼它不起作用?
在主機上,我嘗試使用不帶-g代替剝離副本的二進制編譯,但它沒有工作。
你得到了相反的結論:你需要在目標上剝離二進制文件,並在主機上完全調試二進制文件。
gdbserver
確實通過-g
生產不需要(或使用)調試信息,gdb
一樣。
最好是不編譯兩次,而是與-g
一次編譯,然後:
cp a.out a.out.stripped
strip -g a.out.stripped
,並保持兩者完全調試和剝離二進制在一起。
-g還關閉默認情況下啓用的優化,因此它不等同於剝離可執行文件。 –
@ n.m。你錯了:對於GCC,'-g'標誌根本*不影響優化*。 –
@EmployedRussian你是對的,必須是另一個神話,從舊的壞的許多私有unixes日子繼承。 –