我正在調試使用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)
出了什麼問題嗎?