C Ubuntu 14.04上的gdb问题

C Ubuntu 14.04上的gdb问题,c,gdb,ubuntu-14.04,C,Gdb,Ubuntu 14.04,系统为Ubuntu 14.04 32位,升级至最新版本 测试2.c: #include <unistd.h> void test() { sleep(1000); } int main() { test(); } 运行并尝试将其与gdb连接: $ sudo gdb -p 9038 GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1 ... Attaching to process 9038 Reading symbols fr

系统为Ubuntu 14.04 32位,升级至最新版本

测试2.c:

#include <unistd.h>
void test() {
    sleep(1000);
}
int main() {
    test();
}
运行并尝试将其与gdb连接:

$ sudo gdb -p 9038
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
...
Attaching to process 9038
Reading symbols from /tmp/test2...done.
Reading symbols from /lib/i386-linux-gnu/libc.so.6...Reading symbols from /usr/lib/debug//lib/i386-linux-gnu/libc-2.19.so...done.
done.
Loaded symbols for /lib/i386-linux-gnu/libc.so.6
Reading symbols from /lib/ld-linux.so.2...Reading symbols from /usr/lib/debug//lib/i386-linux-gnu/ld-2.19.so...done.
done.
Loaded symbols for /lib/ld-linux.so.2
0xb7799cb0 in ?? ()
(gdb) bt
#0  0xb7799cb0 in ?? ()
#1  0x00000000 in ?? ()
gdb可以从二进制文件加载符号,但它无法正确解析堆栈。真奇怪


有什么建议吗?

gdb工作正常。当然是你犯了错误。试着用
-Og
编译,并做一些关于调试优化代码的研究。我不知道谁会看不起我的问题。我必须说我不是新手。事实上,即使对于优化的程序,gdb也不应该这样执行。我使用gdb很多年了,但很奇怪,它在Ubuntu 14.04 32位上不起作用,即使是我展示的简单例子,所以我想问一个问题,看看是否有人碰巧有同样的问题。如果你认为我用错了词,我可以改一下标题。如果你知道答案,请直接告诉我。但请不要以你自己的品味来看待这个问题。谢谢大家。如果使用
up
down
命令会发生什么?如果直接从gdb运行可执行文件而不是附加到进程,会发生什么?我可以在gdb 7.7.1中重现这个问题。但它在7.8以后的每个版本中都可以正常工作。建议从中获取最新的源代码并进行编译。您需要首先使用
apt
安装
python dev
libncurses dev
软件包。经过更多测试:gdb 7.7.1在14.04(内核3.13)上运行正常,但在14.04.3(内核3.19)上运行不正常。可能vsyscall页面在3.13和3.19之间发生了更改,GDB7.7.1没有完全处理新格式。
$ sudo gdb -p 9038
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
...
Attaching to process 9038
Reading symbols from /tmp/test2...done.
Reading symbols from /lib/i386-linux-gnu/libc.so.6...Reading symbols from /usr/lib/debug//lib/i386-linux-gnu/libc-2.19.so...done.
done.
Loaded symbols for /lib/i386-linux-gnu/libc.so.6
Reading symbols from /lib/ld-linux.so.2...Reading symbols from /usr/lib/debug//lib/i386-linux-gnu/ld-2.19.so...done.
done.
Loaded symbols for /lib/ld-linux.so.2
0xb7799cb0 in ?? ()
(gdb) bt
#0  0xb7799cb0 in ?? ()
#1  0x00000000 in ?? ()