Linux GDB调试器错误

Linux GDB调试器错误,linux,gcc,gdb,Linux,Gcc,Gdb,如果我的英语不好,我很抱歉。这个问题困扰了我好几天。 我有一个简单的C源代码和一个子函数,我正在检查。首先,我用gcc创建.out文件。我正在用GDB检查这个文件。但是如果我想反汇编被调用的函数,我总是从gdb得到一条错误消息。 序言: unix@unix-笔记本电脑:~/booksrc$gcc-gstack\u示例.c unix@unix-笔记本电脑:~/booksrc$gdb-q./a.out 使用主机libthread_db library“/lib/tls/i686/cmov/libth

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

unix@unix-笔记本电脑:~/booksrc$gcc-gstack\u示例.c
unix@unix-笔记本电脑:~/booksrc$gdb-q./a.out
使用主机libthread_db library“/lib/tls/i686/cmov/libthread_db.so.1”。
(gdb)disass main
主功能的汇编程序代码转储:
0x08048357:推送%ebp
0x08048358:mov%esp,%ebp
0x0804835a:子$0x18,%esp
0x0804835d:和$0xfffffff0,%esp
0x08048360:mov$0x0,%eax
0x08048365:子%eax,%esp
0x08048367:movl$0x4,0xc(%esp)
0x0804836f:movl$0x3,0x8(%esp)
0x08048377:movl$0x2,0x4(%esp)
0x0804837f:movl$0x1,(%esp)
0x08048386:调用0x8048344
0x0804838b:离开
0x0804838c:ret
汇编程序转储结束。
(gdb)disass测试_函数()
如果没有要调试的进程,您就无法做到这一点。
(gdb)
你知道错误的原因吗?我已经用过谷歌,但我找不到任何解决问题的方法。我还搜索了说明,以确保语法正确。

谢谢你的阅读, 相交

语法(属于
gdb
)是
disass
函数名,因此您应该键入

 disass test_function
阅读真品

但是您键入的
错误地禁用了test_function()
;那么结尾的括号就错了

确保您使用
gcc-Wall-g

最后,您可以要求
gcc
输出一个汇编文件。例如,试着用

gcc -O1 -S -fverbose-asm source.c
(如果愿意,可以省略
-O1
或将其替换为
-g


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

可能函数不存在,因为它在编译过程中内联。对不起,我以前从未看到过您的错误消息

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

-O0 -g
您还可以通过以下方式查看所有函数开始地址:

objdump -x <filename>
objdump-x
这将为您提供可执行文件中的符号列表,其中包括所有函数的起点

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

objdump -d <filename>
objdump-d

如何编译C代码;显示确切的命令(它应该以
gcc-Wall-g
开头)。如何运行
gdb
?您使用的是哪个版本的
gcc
gdb
?请编辑您的问题,将键入的命令显示在适当的位置(而不是某些外部站点上的屏幕截图)。在单独的段落中至少用四个空格开始每个命令。请将错误消息的文本放在这里!不欢迎将图像放到外部站点。完成。我读过评论了。以后我将始终发布错误消息。。这很容易,因为我在一个虚拟盒子里工作。。。
objdump -d <filename>