【问题标题】:Debugging information not included with -g-g 不包含调试信息
【发布时间】:2010-11-14 21:56:17
【问题描述】:

目前正在尝试使用 KDbg / gdb 调试来自 http://www.kernelthread.com/projects/hanoi//html/asm.html 的河内塔的源代码(很好的资源)

因为我想查看堆栈在这个问题中的使用方式,所以我将它与 NASM 组装在一起并使用 GCC 来链接它。但是,我注意到在 KDbg 中,当前执行点没有更新(即,我无法确定我在文件中的位置)。由于 KDbg 依赖于 gdb,因此我在 gdb 中运行了代码以查看是否遇到类似问题。

如果我在程序的第 30 行(主函数中的一行)设置断点,我会得到以下信息:

(gdb) break 30
Breakpoint 2 at 0x804840b: file hanoi.asm, line 30.
(gdb) next
Single stepping until exit from function main,
which has no line number information.

我目前正在使用我编写的以下小脚本编译程序集(我可能应该迁移到一个 make 文件,但这一直工作到现在)

bschlinker@net1develop02:~/.scripts$ cat asmgcc
# /usr/bin/sh

nasm -f elf -g -F stabs $1.asm -l $1.lst
gcc -g $1.o -o $1

我刚从 CentOS 迁移到 Ubuntu,所以我不确定这是我不熟悉的操作系统环境问题,还是其他问题。

一如既往,提前感谢您的帮助。

【问题讨论】:

  • @Paul R -- 不幸的是,我已经尝试过进行更改(gcc -g $1.o -o $1)。没有任何区别。

标签: debugging gcc gdb nasm kdbg


【解决方案1】:

尝试-F dwarf 而不是-F stabs

【讨论】:

  • 是的——它奏效了。想解释一下为什么 Ubuntu 上的 kdbg 不再喜欢 stabs,而 CentOS kdbg 仍然喜欢?
  • 我不知道。我确实知道 STABS 是一种非常古老(而且非常可怕)的调试格式,如果可以的话,您通常应该远离它。
【解决方案2】:

您可以与as -o tmp.o something.s && ld -s -o something tmp.o && rm tmp.o 组装。 在 gdb 中只需 display/8i *$eip(或 rip,如果是 64 位),它会在每一步的指令指针后显示 8 条指令。所以你根本不需要调试信息;-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-16
    • 1970-01-01
    • 2019-09-24
    相关资源
    最近更新 更多