【问题标题】:GDB Debugger ErrorGDB 调试器错误
【发布时间】:2014-08-19 19:54:27
【问题描述】:

如果我的英语不好,我很抱歉。这个问题困扰了我好几天。 我有一个简单的 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

感谢阅读, 相交!

【问题讨论】:

  • 你如何编译你的C代码;显示确切的命令(它应该以gcc -Wall -g 开头)。你如何运行gdb?您使用的是gccgdb 的哪个版本?
  • 请编辑您的问题以在适当的位置显示键入的命令(而不是某些外部站点上的屏幕截图)。每个命令在单独的段落中至少有四个空格。
  • 请把错误信息的文本放在这里!不欢迎将图像放到外部站点。
  • 完成。我还读了cmets。将来我会一直发布错误消息..这更容易,因为我在虚拟机中工作......

标签: linux gcc gdb


【解决方案1】:

语法(gdbcommand)是disass 函数名所以你应该输入

 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 程序集文件。

【讨论】:

    【解决方案2】:

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

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

    -O0 -g
    

    您还可以查看所有函数的起始地址:

    objdump -x <filename>
    

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

    您还可以使用以下方法反汇编您的代码:

    objdump -d <filename>
    

    【讨论】:

      猜你喜欢
      • 2018-03-26
      • 2010-10-16
      • 2013-09-22
      • 2015-09-15
      • 2017-02-03
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多