gcc 与 as-ld 用于调试目的,不命中 gdb 断点

发布于 2024-12-29 18:32:23 字数 881 浏览 2 评论 0原文

我的平台是 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烈酒灼喉 2025-01-05 18:32:23

当您使用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 to as. You can see the actual as 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 of as, or why it should matter.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文