我的平台是 ubuntu i686(32 位)
如果我使用带有调试选项的 gcc 驱动程序编译程序集源:
gcc -nostartfiles -g -o toupper toupper.s
我使用 emacs 编辑器上集成的 gdb 调试器打开 toupper 可执行文件
$ emacs toupper.s-> M-x gdb -> M-x gdb-many-windows
我在第一个指令上生成了一个断点
(gdb) b _start
(gdb) run
当我使用 run 命令开始执行时,调试器正确地停止在 _start 标签上。
如果我用 as assembler 编译相同的源 toupper.s 并用 ld 链接器链接:
as -g -o toupper.o toupper.s
ld -o toupper toupper.o
现在调试步骤与 gcc 案例相匹配。
$ emacs toupper.s -> M-x gdb -> M-x gdb-many-windows
(gdb) b _start -> mark with a red point the _start line
(gdb) run -> DONT HIT THE _start LINE ¿?
我看到符号表是正确的,断点标记它是正确的,但执行不是一步一步的。
我在 gcc 案例上显示了详细步骤,并使用 as/ld 案例再次尝试,但结果相同
¿ 在 gcc 案例中有一些默认选项与 as/ld 案例不匹配?
提前致谢