Я отлаживаю проект, который использует предварительно скомпилированные заголовки под GDB. Проверяя трассировку стека аварий, я обнаружил, что GDB печатает правильные имена функций, но некорректные данные о файле и строке.Неправильная трассировка стека с предварительно скомпилированным заголовком GCC +
Посмотрите на следующие примеры:
file.h
#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 -> Выполнить -> Ы: напечатает что-то вроде
....
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 iled с тем же набором флагов командной строки и что этот предварительно скомпилированный заголовок действительно найден и используется (отмечен параметром -H). Никакие оптимизации не включаются.
Программа составлена с
-D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS = 64 -Wno-неиспользованных -fexceptions -std = ГНУ ++ 0x-ППИЦ -Winvalid-PCH -Wdisabled-оптимизации -Wuninitialized -Wsequence точка -Winit-я
НКУ -v дает следующий вывод
Используя встроенные функции.
Цель: x86_64-Linux-гну
Настраивается с: ../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-check = release --build = x86_64-linux-gnu -host = x86_64-linux-gnu --target = x86_64-linux-gnu
0 модельТема: POSIX
GCC версии 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)
Что может быть не так?