C++ GDB可以';t访问/单步进入文件进行调试

C++ GDB可以';t访问/单步进入文件进行调试,c++,debugging,gdb,clion,C++,Debugging,Gdb,Clion,我试图调试一段代码,但GDB似乎完全无法读取特定的单个文件。到达时,将立即跳过该文件内的任何断点或包含引用该文件的内容(如从该文件实例化类)的断点 从我在谷歌上收集到的信息来看,这是一个在21世纪初首次出现在GDB上的bug,在2005年消失了,但仍然很少发生,并且没有文档化的解决方案 这个文件和它的头文件(只有声明)是GDB无法访问的唯一文件 该项目正在使用CMake进行编译,并使用标志-g3-O0,因此我认为没有遗漏调试信息 我通过我的IDE CLion 1.0.3使用GDB,但使用终端会出

我试图调试一段代码,但GDB似乎完全无法读取特定的单个文件。到达时,将立即跳过该文件内的任何断点或包含引用该文件的内容(如从该文件实例化类)的断点

从我在谷歌上收集到的信息来看,这是一个在21世纪初首次出现在GDB上的bug,在2005年消失了,但仍然很少发生,并且没有文档化的解决方案

这个文件和它的头文件(只有声明)是GDB无法访问的唯一文件

该项目正在使用CMake进行编译,并使用标志
-g3-O0
,因此我认为没有遗漏调试信息


我通过我的IDE CLion 1.0.3使用GDB,但使用终端会出现同样的问题。

这通常会导致一个文件无法以某种方式获得
-g
,或者无法重建,或者类似的问题。很少有其他原因。您可以使用
readelf-WS
并查找各种调试部分来检查
.o
文件是否有调试信息。@TomTromey我这样做了,并且该文件有一些部分命名为“调试行”、“调试str”和“调试宏”,因此我猜它是正确的。我还对文件进行了完整重建(删除了build dir,重新运行cmake..然后进行了重建),但它不起作用。Ok。接下来,我将检查最终的可执行文件,以确保该文件中的调试信息存在。为此,您可以在可执行文件上使用
readelf-wi
。您可以按文件名搜索特定CU。接下来要检查的是gdb是否出于某种原因拒绝了CU。为此,您需要在gdb中
set
,然后是
file
来打开可执行文件。我使用了
readelf-wi
,但它找不到我试图调试的类的引用。通过GDB上的投诉设置,我在符号读取过程中收到大量
,读取类型中出现意外标记:“DW\u tag\u rvalue\u reference\u type”。
错误。恐怕您遇到了错误: