2016-07-25 47 views
0

我寫了簡單的x86彙編程序:objdump的--dwarf的彙編代碼沒有列出功能

$ cat asm.s 

.global foo 

.section .text 
foo: 
    nop 
    ret 

而且隨着

$ gcc -c -g asm.s -o asm.o 

編譯,但是當我做objdump --dwarf asm.o,它不會顯示任何有關功能foo的信息。看起來,gcc不會創建有關foo的詳細信息.debug_info

順便說一句,在.symtab有一個foo條目。

任何想法?

+0

該函數未被調用。也許它被優化爲死代碼? –

+0

@JanHenke謝謝。 asm.s是編制單位之一。我從其他編譯單元中定義的main()調用它。除此之外,我沒有使用任何gcc優化選項。否則它不會出現在符號表中。對? – Ravi

回答

1

錯誤出現在objdump命令中。使用下面的命令,它會顯示你的函數的彙編列表:

objdump -d -M intel -S asm.o 

現在你更新的問題 - 如果你要包括調試信息,然後調用與彙編:

gcc -gdwarf2 -c asm.s -o asm.o 

現在objdump --dwarf將顯示調試信息。

+0

使用-d選項編號的objdump將反彙編代碼。但我正在問 - 矮人選項。 (問題的更新標題) – Ravi