Символы отладки утеряны при соединении? - PullRequest
16 голосов
/ 23 марта 2012

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

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

g++ -g file.c -o file

и за два прохода

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

Фактическая программа выглядит следующим образом и содержит простую неверную запись

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

Ответы [ 2 ]

8 голосов
/ 30 ноября 2012

Последнее замечание - это была действительно особенность OS X, связанная с тем, как OS X связывает отладочную информацию.Valgrind помогает пользователю обойти проблему с помощью команды --dsymutil=yes.

Подробнее об этом можно прочитать здесь: http://valgrind.org/docs/manual/manual-core.html#manual-core.erropts

Благодарим Дэйва Гуделла, который прислал мне решение на форуме пользователей valgrind..

2 голосов
/ 15 августа 2012

Просто для того, чтобы пометить этот вопрос как «отвеченный» (чтобы его не открывали и не читали другие).

=> Ответ найден как комментарий пользователя «user1288111» к исходному вопросу.

...