2012-05-04 2 views
2

У меня есть код C/C++, который дает segfault. Он скомпилирован с использованием gcc/g ++ на сервере RH Linux Enterprise. Я использовал проверку памяти Valgrind на исполняемом с:Как отлаживать далее на основе вывода Valgrind

valgrind --tool=memcheck --leak-check=full --show-reachable=yes 

я получаю это как один из выходных сообщений VALGRIND в:

==7053== Invalid read of size 1 
==7053== at 0xDBC96C: func1 (file1:4742) 
==7053== by 0xDB8769: func2 (file1.c:3478) 
==7053== by 0xDB167E: func3 (file1.c:2032) 
==7053== by 0xDB0378: func4 (file1.c:1542) 
==7053== by 0xDB97D8: func5 (file1.c:3697) 
==7053== by 0xDB17A7: func6 (file1.c:2120) 
==7053== by 0xDBD55E: func7 (file2.c:271) 

==7053== Address 0x1bcaf2f0 is not stack'd, malloc'd or (recently) free'd 

Я читал, что означает, что мой код доступен недопустимое место в памяти его не допускается.

Мои вопросы:

  1. Как узнать, какой доступ буферной памяти были недействительными, и какие из функций выше сделали это.

  2. Как я могу использовать адрес 0x1bcaf2f0, который, по словам valgrind, является недействительным. Как я могу найти символ (по существу, имя буфера) по этому адресу? Файл карты памяти, любым другим способом.

  3. Любые другие общие указатели, параметры valgrind или другие инструменты для использования Valgrind для обнаружения ошибок памяти (кучи/стека)?

ответ

3

Объявление 1: В вашем примере это будет func1 в файле строки1: 4742 (1). Следующие функции - это трассировка стека. Анализ этой строки приведет к недопустимому доступу к памяти.

Объявление 2: попробуйте разбить его на несколько простых линий на случай, если оно слишком сложное и неясно, какой именно вызов вызывает предупреждение.

Объявление 3: memcheck - это квинтэссенциальный инструмент valgrind для обнаружения ошибок с памятью кучи. Тем не менее, это не поможет.

+0

Спасибо. Любые указатели на то, как я могу отслеживать переменную в ячейке памяти '0x1bcaf2f0', которая показана в выводе valgrind выше? – goldenmean

+0

Особенно, если указанный адрес поступает из динамически распределенных буферов? – goldenmean

+0

Что помогает при повреждении стека? – xaxxon