Assembly NASM中的调试符号(再次)

Assembly NASM中的调试符号(再次),assembly,gdb,nasm,lldb,dwarf,Assembly,Gdb,Nasm,Lldb,Dwarf,这个问题在StackOverflow上被问了好几次,但我尝试了所有的答案,仍然无法让NASM包含矮人调试符号 我正在Ubuntu 18.04 64位下使用NASM 2.13.02。我不确定我是否还缺少什么 如果有关系,我实际上希望同时使用LLDB和GDB 谢谢 这是我的密码: section .bss section .text global _start _start: mov ebx, 0 mov eax, 1 int 80h 以下是我如何构建和链接它: nas

这个问题在StackOverflow上被问了好几次,但我尝试了所有的答案,仍然无法让NASM包含矮人调试符号

我正在Ubuntu 18.04 64位下使用NASM 2.13.02。我不确定我是否还缺少什么

如果有关系,我实际上希望同时使用LLDB和GDB

谢谢

这是我的密码:

section .bss
section .text

global _start

_start:
    mov ebx, 0
    mov eax, 1
    int 80h
以下是我如何构建和链接它:

nasm-g-F dwarf-F elf64 hello.asm
ld-s-o你好,你好
生成的文件是:

$ ls -la hello
-rwxr-xr-x 1 terry terry 352 Sep  4 18:21 hello
$
正在尝试检查是否包含DWARF数据:

$ dwarfdump hello
No DWARF information present in hello
$
在gdb下运行它:

$ gdb ./hello 
GNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-git
[... snip copyright ...]
Reading symbols from ./hello...(no debugging symbols found)...done.
(gdb) 

根据@Michael Petch的建议,我在自我回答我自己的问题,他是真正找到根本原因的人

问题是我使用了
ld
-s
,意思是“剥离所有”,包括调试符号,也就是说,我在破坏我自己的努力

正确的命令应该是:

nasm -g -F dwarf -f elf64 hello.asm
ld -o hello hello.o
现在,使用gdb:

$ gdb ./hello 
GNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-git
[.. snip copyright ..]
Reading symbols from ./hello...done.

(gdb) b _start
Breakpoint 1 at 0x400080: file hello.asm, line 7.

(gdb) run
Starting program: /home/terry/hello 

Breakpoint 1, _start () at hello.asm:7
7       xor ebx, 0
(gdb) 
$

因为您使用
ld
指定了
-s
,这是一个剥离所有的代码,所以它也删除了最终可执行文件中的调试信息。哎哟,@MichaelPetch,非常感谢,这是一个新手犯的错误。谢谢!没问题。我们都得学习@MichaelPetch请随时将您的评论转移到回答中,我将很乐意接受。几天后,请不要忘记回来接受您自己的回答。祝你周末愉快!谢谢,当然可以!