GDB调试器错误

时间:2014-08-19 19:54:27

标签: linux gcc gdb

如果我的英语不好,我很抱歉。这个问题让我好几天了。 我有一个简单的C源代码,我正在检查子函数。首先,我用gcc创建.out文件。我正在用GDB检查这个文件。但是,如果我想反汇编被调用的函数,我总是从gdb获得一条错误消息。 序言:

unix@unix-laptop:~/booksrc $ gcc -g stack_example.c
unix@unix-laptop:~/booksrc $ gdb -q ./a.out
Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".
(gdb) disass main
Dump of assembler code for function main:
0x08048357 <main+0>:    push   %ebp
0x08048358 <main+1>:    mov    %esp,%ebp
0x0804835a <main+3>:    sub    $0x18,%esp
0x0804835d <main+6>:    and    $0xfffffff0,%esp
0x08048360 <main+9>:    mov    $0x0,%eax
0x08048365 <main+14>:   sub    %eax,%esp
0x08048367 <main+16>:   movl   $0x4,0xc(%esp)
0x0804836f <main+24>:   movl   $0x3,0x8(%esp)
0x08048377 <main+32>:   movl   $0x2,0x4(%esp)
0x0804837f <main+40>:   movl   $0x1,(%esp)
0x08048386 <main+47>:   call   0x8048344 <test_function>
0x0804838b <main+52>:   leave  
0x0804838c <main+53>:   ret    
End of assembler dump.
(gdb) disass test_function()
You can't do that without a process to debug.
(gdb)

您是否知道错误的原因?我已经使用谷歌,但我找不到任何解决问题的方法。我还搜索了指令以确保语法正确。 http://visualgdb.com/gdbreference/commands/disassemble

感谢阅读, 相交!

2 个答案:

答案 0 :(得分:2)

gdb command)的语法是disass function-name ,因此您应该输入

 disass test_function

阅读正版GDB documentation

但你输错了 disass test_function() ;然后结束括号是错误的。

请确保使用gcc -Wall -g

编译了源代码

最后,您可以要求gcc输出汇编程序文件。例如,尝试使用

编译source.c文件
gcc -O1 -S -fverbose-asm source.c

(如果您愿意,可以省略-O1或将其替换为-g

然后使用编辑器(或某个寻呼机)查看生成的source.s程序集文件。

答案 1 :(得分:0)

也许函数不存在,因为它在编译期间被内联。我之前从未见过您的错误消息,抱歉。

请尝试使用以下附加标志进行编译:

-O0 -g

您还可以通过以下方式查看所有功能起始地址:

objdump -x <filename>

这为您提供了可执行文件中的符号列表,其中包含函数的所有起点。

您还可以使用以下命令反汇编代码:

objdump -d <filename>