GDBのプリコンパイル済みヘッダーを使用するプロジェクトをデバッグしています。クラッシュスタックのトレースを調べているうちに、GDBは正しい関数名を出力しますが、ファイルと行番号の情報は間違っています。以下の実施例でGCC +のプリコンパイル済みヘッダーでスタックトレースが正しくない
ルック:
ファイル.hヘッダにのみ5行があること
#ifndef FILE_H_
#define FILE_H
#include "../precompiled_header.h"
void func_A();
void func_B();
#endif //FILE_H
注意。
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:GDBが
を印刷し、できるだけ早く私はprecompiled_header.h.gchを削除するよう....
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
私は、プリコンパイルされたヘッドとすべてのファイルがcomp同じコマンドラインフラグのセットでileされ、このプリコンパイルされたヘッダーが実際に見つけられ使用されます(-Hオプションでチェックされます)。最適化は有効になっていません。
、プログラムは
-D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS = 64 -Wno-未使用-fexceptions -std = GNU ++ 0X-FPIC -Winvalid-PCH -Wdisabled最適化でコンパイルされ-Wuninitialized内蔵のスペックの使用次の出力
を与える-v -Wsequence点-Winit自己
GCC。
対象:x86_64版 - のlinux-gnuので構成
:--with-bugurl ../src/configure -v --with-pkgversion = 'Ubuntuの4.4.3-4ubuntu5.1' =ファイル: ///usr/share/doc/gcc-4.4/README.Bugs --enable-languages = c、C++、fortran、objc、obj-C++ --prefix =/usr --enable-shared --enable-multiarch - -libexecdir =/usr/lib --without-included-gettext --enable-threads = posix --with-gxx-include-dir =/usr/lib// include/C++/4.4 --program-suffix = -4.4 --enable-nls --enable-clocale = gnu --enable-libstdcxx-debug --enable-plugin --enable-objc-gc --disable-werror - -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)
ここで間違っている可能性が何?