我正在调试使用GDB下的预编译头的项目。在检查崩溃堆栈跟踪时,我发现GDB输出正确的函数名称,但文件和行号信息不正确。错误的堆栈跟踪与GCC +预编译头
请看下面的例子:
file.h
#ifndef FILE_H_
#define FILE_H
#include "../precompiled_header.h"
void func_A();
void func_B();
#endif //FILE_H
注意,只有5在标题行。
file.cpp
#include "file.h"
void func_A()
{
int *a = 0;
*a =0;
}
void func_B()
{
func_A();
}
int main()
{
func_B();
return 0;
}
GDB程序 - >运行 - > BT:将尽快打印出类似这样
....
func_A(): file.h at 32 <- incorrect file and line information
func_B(): file.h at 40 <- incorrect file and line information
main(): file.cpp at 14
我删除precompiled_header.h.gch,GDB打印
func_A(): file.cpp at 5 <- OK!
func_B(): file.cpp at 10 <- OK!
main(): file.cpp at 14
我确定预编译的头和所有文件都是comp使用相同的命令行标志集,并且这个预编译头部确实被找到并使用(使用-H选项进行检查)。没有优化打开。
的程序编译与
-D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS = 64 -Wno非占线-fexceptions -std = GNU ++ 0x中-FPIC -Winvalid-PCH -Wdisabled优化-Wuninitialized -Wsequence点-Winit自
GCC -v给出了下面的输出
使用内置的规格。
目标:x86_64的-Linux的GNU
配置有:../src/configure -v --with-pkgversion = '的Ubuntu 4.4.3-4ubuntu5.1' --with-bugurl =文件: ///usr/share/doc/gcc-4.4/README.Bugs --enable-languages = c,C++,fortran,objc,obj-C++ --prefix =/usr --enable-shared --enable-multiarch - -enable-linker-build-id --with-system-zlib --libexecdir =/usr/lib --without-included-gettext --enable-threads = posix --with-gxx-include-dir =/usr/include/C++/4.4 --program-suffix = -4.4 --enable-nls --enable-clocale = gnu --enable-libstdcxx-debug --enable-plugin --enable -objc -gc --disable-werror - -with-arch-32 = i486 --with-tune = generic --enable-checking = release --build = x86_64-linux-gnu --host = x86_64-linux-gnu --target = x86_64-linux-gnu
线程模型:POSIX
gcc版本4.4.3(Ubuntu的4.4.3-4ubuntu5.1)
出了什么问题吗?