Valgrind не возвращает исходные строки! - PullRequest
5 голосов
/ 26 октября 2010

Я попытался запустить valgrind (memcheck и massif) в приложении, которое я написал, но все, что я получаю, это адреса выполняемых функций.

---------------------------------
Context accounted for  0.6% of measured spacetime
  0x805F29A: (within prog_name)
  0x8141740: (within prog_name)

Called from:
   0.6% : 0x812E077: (within prog_name)

---------------------------------
Context accounted for  0.5% of measured spacetime
  0x805F29A: (within prog_name)
  0x81418FB: (within prog_name)

Called from:
   0.5% : 0x812E077: (within prog_name)

Я скомпилировал свое приложение с помощью -gфлаг для вставки символов отладки. Есть ли какая-либо другая причина, по которой valgrind не показывает строку с исходным кодом?

EDIT: valgrind версия 3.2.1-Debian;g ++ 4.3.1

Ответы [ 4 ]

8 голосов
/ 26 октября 2010

Я обнаружил, что передал оба флага -g и -ggdb в g++ во время компиляции. Отсутствие флага -g привело к исчезновению этой проблемы.

2 голосов
/ 27 октября 2010

Есть несколько возможных причин:

  • вы могли случайно удалить свой исполняемый файл (наиболее вероятное объяснение),
  • вы можете выполнять код JITted (хотя адрес нене похоже, что это так).

Что говорит file prog_name?Если он говорит «раздели», это проблема.Вы также можете проверить, знают ли другие инструменты, например, GDB, какой символ находится по адресу 0x805F29A:

gdb prog_name
(gdb) info symbol 0x805F29A
1 голос
/ 05 марта 2013

Для других читателей с похожей проблемой (у меня были те же, но мои параметры компилятора, где все в порядке): Оказывается, что valgrind нужен путь к исполняемому файлу, если вы не дадите его, он будет работать нормально, но не даст вам номера строк. В моем случае исполняемый файл находился в другом каталоге, который был в моем PATH, но для получения информации о строке мне нужно было запустить

valgrind --leak-check = полный путь_в_программе / myprogram

1 голос
/ 26 октября 2010

Полагаю, вы не упоминаете правильные флаги и используете флаги по умолчанию.

- show-достижимый - один из таких флагов, который следует включить, пожалуйста, посмотрите на другие флаги и включите их.*

- Ура

...