2011-08-21 91 views
2

我有一個.c C源代碼和一個.S彙編源代碼的項目。一旦編譯和鏈接,是否有任何方法使用Kdbg調試.S代碼?我從.c文件中調用一個.S函數,但在Kdbg中沒有代碼加載。使用Kdbg調試彙編代碼

+0

爲什麼選擇kdbg而不是WinDbg?和哪個編譯器?什麼構建選項?請詳細說明! –

+0

我在Ubuntu – LooPer

+0

下使用gcc,請添加gcc和ubuntu標籤,否則你的問題是不明確的。 Kdbg是Windows上的內核調試器。 –

回答

3

在源文件中添加.file指令,如:.file「sourceasm.s」。 Kdbg會按照預期使用它。

1

我剛剛試過kdbgthe KDE front-end for gdb,而不是幾乎相同名稱的Linux kernel debugger kgdb)。

它似乎沒有像普通gdb的layout asm一樣的適當的反彙編模式。您可以將「存儲器」窗口設置爲反彙編,並將地址設置爲$pc(並且會以單步的方式更新),但是這會鎖定存儲器窗口,並且不便於在當前RIP之前設置斷點或向後滾動到指令/ EIP。

即使您正在調試asm源代碼,您有時也希望讓調試器向您展示真正的反彙編,以及/而不是asm源代碼。例如在使用宏的代碼中,或者在NASM %rep中重複塊。

AFAICT,kdbg對於asm調試並不是一個很好的選擇。具有layout asm/layout reg的文本模式GDB可以;請參閱標記wiki底部的提示。我也試過https://github.com/cs01/gdbgui。它有一個反彙編模式,但它不是很好。


由於@ivan說,使用kgdb會讓你做的ASM源文件源級調試,如果你補充足夠的元數據,因爲它知道對象來自哪一個源文件。

  • GCC:建立與gcc -g foo.S
  • NASM:nasm -felf64 -g -Fdwarf組裝到包括DWARF調試信息。 (NASM默認爲STABS調試信息,也可以使用。)
  • YASM:yasm -felf64 -gdwarf2組裝

請參閱Assembling 32-bit binaries on a 64-bit system (GNU toolchain)瞭解關於從asm源碼構建靜態/動態二進制文件的更多信息。