Ответ 1
Просто для того, чтобы отметить этот вопрос как "ответил" (поэтому он не открывается и не читается другими).
= > Ответ можно найти в качестве комментария от пользователя user1288111 к первоначальному вопросу.
Я пытаюсь скомпилировать программу с отладочными символами, чтобы 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
Просто для того, чтобы отметить этот вопрос как "ответил" (поэтому он не открывается и не читается другими).
= > Ответ можно найти в качестве комментария от пользователя user1288111 к первоначальному вопросу.
Заключительное замечание - это действительно специфическая функция OS X, связанная с тем, как OS X связывает отладочную информацию. Valgrind помогает пользователю обойти проблему с помощью команды --dsymutil=yes
.
Подробнее об этом можно прочитать здесь: http://valgrind.org/docs/manual/manual-core.html#manual-core.erropts
Кредит Дэйву Гуделлу, который прислал мне решение на форуме пользователей valgrind.