GCC+的堆栈跟踪不正确;预编译头文件
我正在调试一个在GDB下使用预编译头的项目。在检查崩溃堆栈跟踪时,我发现GDB打印的函数名正确,但文件和行号信息不正确 请看以下示例: 文件.h 请注意,标题中只有五行 file.cpp gdb程序->运行->bt:将打印如下内容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
....
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