Linux gdb找不到任何调试符号 我编译了一个C++程序,现在想用GDB调试它。gcc的版本是gdb的gcc(Ubuntu4.8.5-2ubuntu1~14.04.1)4.8.5,它是GNU gdb(Ubuntu7.7.1-0ubuntu5~14.04.2)7.7.1

Linux gdb找不到任何调试符号 我编译了一个C++程序,现在想用GDB调试它。gcc的版本是gdb的gcc(Ubuntu4.8.5-2ubuntu1~14.04.1)4.8.5,它是GNU gdb(Ubuntu7.7.1-0ubuntu5~14.04.2)7.7.1,linux,ubuntu,debugging,gcc,gdb,Linux,Ubuntu,Debugging,Gcc,Gdb,启动gdb,比如$gdb--args./my_program/path/to/a/file可以工作,但它会产生以下消息: Reading symbols from ./my_program...(no debugging symbols found)...done. 我仍然可以使用run运行程序,但是任何需要调试符号的操作都会失败,比如在行上设置断点,或者使用I行或I局部变量 因此,正如中所建议的,我运行了$objdump--debug./my_program,输出填充了几千行,因此我相当确定

启动gdb,比如
$gdb--args./my_program/path/to/a/file
可以工作,但它会产生以下消息:

Reading symbols from ./my_program...(no debugging symbols found)...done.
我仍然可以使用
run
运行程序,但是任何需要调试符号的操作都会失败,比如在行上设置断点,或者使用
I行
I局部变量

因此,正如中所建议的,我运行了
$objdump--debug./my_program
,输出填充了几千行,因此我相当确定调试符号确实可用

也有,但似乎更多地与共享库相关。在gdb中运行
info-sharedlibrary
表明,在我的例子中,这些库没有调试信息,但我认为我不需要担心这一点

(gdb) info sharedlibrary
From                To                  Syms Read   Shared Object Library
0x00007ffff7ddab00  0x00007ffff7df5660  Yes         /lib64/ld-linux-x86-64.so.2
0x00007ffff74f1250  0x00007ffff74f1dc3  Yes (*)     /usr/lib/x86_64-linux-gnu/libboost_system.so.1.54.0
0x00007ffff72e0a80  0x00007ffff72eb5e0  Yes (*)     /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.54.0
0x00007ffff70a5810  0x00007ffff70b6a43  Yes (*)     /usr/lib/x86_64-linux-gnu/libexif.so.12
[...]
(*): Shared library is missing debugging information.
正如评论中所建议的,我还检查了剥离:

$ file ./my_program
./shore_evaluate: ELF 64-bit LSB  executable, x86-64, version 1 (GNU/Linux), 
dynamically linked (uses shared libs), for GNU/Linux 2.6.24,
BuildID[sha1]=aa85fb21d388828eced5bd0be4202a50bbba1b90, not stripped

我怎样才能让GDB找到调试符号?

如何编译二进制文件?检查gcc的手册页通常您需要使用
-g
-ggdb
编译,生成带有调试符号的可执行文件,我正在使用cmake
-g
在我的
CMAKE_CXX_标志中,据我所知,
objdump
的输出证明了这一点。尝试用
-ggdb
替换
-g
,并确保没有任何剥离,例如
-s
-s
完成,没有任何更改。我还尝试了
file./my_程序
,这表明编译后没有发生剥离。@deimus似乎我错了,问题实际上是cmake。我已经添加了
-gddb
并清除了缓存,重新运行了cmake,然后使用make重新编译了所有内容,现在调试符号都在那里:
从/my_程序读取符号…完成。
非常感谢您的帮助!