gcc 与 as-ld 用于调试目的,不命中 gdb 断点
我的平台是 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 汇编器编译相同的源 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 情况不匹配?
提前致谢
My platform is ubuntu i686 (32 bits)
If i compile a assembly source with gcc driver with debugging options :
gcc -nostartfiles -g -o toupper toupper.s
I open the toupper executable with gdb debugger integrated on emacs editor
$ emacs toupper.s-> M-x gdb -> M-x gdb-many-windows
I generated a breakpoint on first instruccion with
(gdb) b _start
(gdb) run
When i start the execution wiht run command the debugger stop on _start label, correctly.
If I compile the same source toupper.s with as assembler and link with ld linker:
as -g -o toupper.o toupper.s
ld -o toupper toupper.o
Now the steps for debugging matched the gcc case.
$ 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 ¿?
I see that the symbole table is correct, the breakpoints mark it is correct but the execution is NOT step by step.
I have display de verbose steps on gcc case and tried it again with as/ld case but the result is the same
¿ There is some default option on gcc case that not matched the as/ld case?
Thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当您使用
gcc -nostartfiles -g ...
构建时,GCC(至少是我在Linux系统上的GCC)将-gdwarf2
传递给as
。如果将-v
添加到 gcc 的调用中,您可以看到实际的as
命令。当您直接使用
as -g ...
构建时,您不会传递-gdwarf2
。我猜这就是行为差异的解释。我不确定
-g
对您的as
版本意味着什么,或者为什么它很重要。When you build with
gcc -nostartfiles -g ...
, GCC (at least my GCC on a Linux system) passes-gdwarf2
toas
. You can see the actualas
command if you add-v
to gcc's invocation.When you build with
as -g ...
directly, you are not passing-gdwarf2
.I am guessing that is what explains the difference in behavior. I am not sure what
-g
means to your version ofas
, or why it should matter.