GCC+的堆栈跟踪不正确;预编译头文件

GCC+的堆栈跟踪不正确;预编译头文件,gcc,precompiled-headers,Gcc,Precompiled Headers,我正在调试一个在GDB下使用预编译头的项目。在检查崩溃堆栈跟踪时,我发现GDB打印的函数名正确,但文件和行号信息不正确 请看以下示例: 文件.h 请注意,标题中只有五行 file.cpp gdb程序->运行->bt:将打印如下内容 .... func_A(): file.h at 32 <- incorrect file and line information func_B(): file.h at 40 <- incorrect file and line information

我正在调试一个在GDB下使用预编译头的项目。在检查崩溃堆栈跟踪时,我发现GDB打印的函数名正确,但文件和行号信息不正确

请看以下示例:

文件.h

请注意,标题中只有五行

file.cpp

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
。。。。
func_A():32处的file.h这是一个编译器错误:

它已在g++4.5中修复,因此您应该升级编译器

不过,最好将预编译头包含在cpp文件的第一行,而不是h文件,因为预编译头包含需要位于编译单元的顶部。在您的情况下,每次包含头文件时都会包含它。此更改将阻止该错误影响您

#include "file.h"

void func_A()
{
    int *a = 0;
    *a =0;
}
void func_B()
{
    func_A();
}

int main()
{
    func_B();

    return 0;
}
....
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
func_A(): file.cpp at 5  <- OK!
func_B(): file.cpp at 10 <- OK!
main():   file.cpp at 14