Отладочные символы, потерянные при связывании?

Я пытаюсь скомпилировать программу с символами отладки, чтобы valgrind выдавал мне номера строк. . Я обнаружил, что если я скомпилирую простую тестовую программу за один раз (с ключом -g), то она будет содержать символы. Однако, если я компилирую в два прохода (т.е. компилирую, а затем связываю), то он не содержит символов отладки.

Вот команда компиляции для случая с одним проходом:

g++ -g file.c -o file

И для двух проходов

g++ -g -c file.c -o file.o
g++ -g file.o -o file

Фактическая программа выглядит так и содержит простую Invalid Write

int main(){
    int* x = new int[10];
    x[10]=1;

}

Если я компилирую с одним проходом, то valgrind дает следующее (обратите внимание на номер строки в конце)

==24114== 40 bytes in 1 blocks are definitely lost in loss record 2 of 9
==24114==    at 0xB823: malloc (vg_replace_malloc.c:266)
==24114==    by 0x5768D: operator new(unsigned long) (in /usr/lib/libstdc++.6.0.9.dylib)
==24114==    by 0x576DA: operator new[](unsigned long) (in /usr/lib/libstdc++.6.0.9.dylib)
==24114==    by 0x100000F09: main (file.c:3)

, тогда как если я компилирую в два прохода, я получаю это (без номера строки):

==24135== 40 bytes in 1 blocks are definitely lost in loss record 2 of 9
==24135==    at 0xB823: malloc (vg_replace_malloc.c:266)
==24135==    by 0x5768D: operator new(unsigned long) (in /usr/lib/libstdc++.6.0.9.dylib)
==24135==    by 0x576DA: operator new[](unsigned long) (in /usr/lib/libstdc++.6.0.9.dylib)
==24135==    by 0x100000F09: main (in ./file)

Любое понимание этого будет высоко оценено. Я использую gcc версии 4.2.1 в OS X 10.7.3

16
задан ks1322 23 March 2012 в 19:05
поделиться