gpt4 book ai didi

gcc - GCC + 预编译 header 的堆栈跟踪不正确

转载 作者:行者123 更新时间:2023-12-02 00:23:39 25 4
gpt4 key购买 nike

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

看下面的例子:

文件.h

#ifndef FILE_H_
#define FILE_H
#include "../precompiled_header.h"

void func_A();
void func_B();
#endif //FILE_H

请注意标题中只有五行。

文件.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

我确定预编译头文件和所有文件都是使用同一组命令行标志编译的,并且确实找到并使用了这个预编译头文件(使用 -H 选项检查)。没有打开优化。

程序是用

编译的

-D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Wno-unused -fexceptions -std=gnu++0x-fPIC -Winvalid-pch -Wdisabled-optimization -Wuninitialized -Wsequence-point -Winit-self

gcc -v 给出以下输出

Using built-in specs.

Target: x86_64-linux-gnu

Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.3-4ubuntu5.1' --with-bugurl=file:///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

Thread model: posix

gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)

这里可能出了什么问题?

最佳答案

这是一个编译器错误:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44550

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

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

关于gcc - GCC + 预编译 header 的堆栈跟踪不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9840889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com