Как заставить отладчик Valgrind пройти программу - PullRequest
11 голосов
/ 09 февраля 2011

Доброе утро, я пытаюсь использовать отладчик Valgrind для пошагового выполнения программы.

Моя командная строка valgrind - valgrind -tool memcheck --leak-check=full --db-enable=yes ./MatchUpAcurate.exe.

Я использую valgrind-3.5.0 в Centos Linux версии 5.5 с gdb версии 7,0.1-23.el5_5.2.

Я ввожу Да, когда valgrind задает вопрос «Присоединиться к отладчику». Затем отладчик valgrind возвращается с: 4428: return new tuple2<int,A>(2, i++, p->next());

Когда я пытаюсь использовать команду gdb step или continue, valgrind говорит

[New Thread 0x410fd10 (LWP 6548] Cannot find user-level thread for LWP 6551: generic error.

Когда я пытаюсь использовать опцию отладчика valgrind --single-step=yes в командной строке valgrind, valgriind говорит Bad option aborting.

Могут ли пользователи valgrind показать мне, как пройти через исходный код C ++ или продолжить работу с программой? Спасибо.

Ответы [ 2 ]

13 голосов
/ 10 февраля 2011

Я спросил разработчиков valgrind, как создать отладчик valgrind.Вот что они сказали:

  1. Загрузите исходные файлы 3.6.0 с веб-сайта valgrind.

  2. Затем вы должны применить патч, которыйнаходится в баге 214909.

  3. После правильной компиляции вы запускаете приложение следующим образом:

    valgrind --vgdb=yes --vgdb-error=0 ./prog
    

    , а затем в другом окне:

    gdb ./prog
    target remote | vgdb
    
  4. Не запускать внешний gdb-сервер: патч должен интегрировать gdb-сервер в valgrind.Этот встроенный в valgrind сервер gdb активируется параметром --vgdb = yes.

11 голосов
/ 07 декабря 2011

Вы также можете получить vgdb в версии 3.7.0.Из примечаний к выпуску:

  • Сервер GDB: теперь в Valgrind есть встроенный сервер GDB.Это означает, что можно управлять запуском Valgrind из GDB, выполняя все обычные действия, которые может выполнять GDB (одиночный шаг, точки останова, анализ данных и т. Д.).Функциональные возможности инструмента также доступны.Например, при запуске Memcheck можно запрашивать состояние определенности переменных или памяти изнутри GDB;поддерживаются произвольно большие точки наблюдения и т. д. Чтобы использовать GDB-сервер, запустите Valgrind с флагом --vgdb-error = 0 и следуйте инструкциям на экране.

В valgrind больше информациионлайн руководство.

...