Как сделать отладчик 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.