Как сделать отладчик Valgrind через программу

Доброе утро, я пытаюсь использовать отладчик 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 или continue, valgrind говорит

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

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

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

Ответ 1

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

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

Там больше информации в онлайн-справочнике valgrind.

Ответ 2

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

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

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

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

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

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

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