CPPUTest отладка - C ++ - PullRequest
       38

CPPUTest отладка - C ++

0 голосов
/ 09 ноября 2011

Я изучаю TDD и использую CppUTest в затмении. Есть ли способ отладить мой код, получая ноющую ошибку сегментации.

Спасибо

Ответы [ 2 ]

2 голосов
/ 09 ноября 2011

Я не знаю ничего особенного в CppUTest или Eclipse, чтобы помочь вам, но некоторые общие идеи отладки segfault здесь уместны:

  • Добавьте flushing операторы печати (например, printf (...) + fflush (stdout) или fprintf (stderr, ...)) к своему коду и посмотрите, что будет напечатано. Делайте это в режиме бинарного поиска с несколькими отпечатками за раз, пока вы не сузите точно там, где происходит сбой. Это звучит старомодно, но чрезвычайно эффективно. Вот руководство, которое я нашел в Google, рассказывающее об этой известной технике: http://www.floccinaucinihilipilification.net/blog/2011/3/24/debugging-via-binary-search.html

  • Скомпилируйте ваш код с отладочными символами и запустите его в отладчике. Когда вы нажмете свой segfault, попросите обратную трассировку и посмотрите, сможете ли вы выяснить, что произошло. При этом может быть особенно полезно использовать графический отладчик .

  • Запустите ваш код с помощью средства отладки, такого как библиотека отладки malloc или что-то из набора valgrind . Это может выявить проблемы, которые являются коренными причинами ваших segfaults, но не возникают именно в том месте, где генерируется segfault (например, двойное освобождение, указатели контроля доступа из связанного массива, используемые позже и т. Д.).

0 голосов
/ 29 апреля 2015

Было бы полезно, если бы вы могли добавить код к своему вопросу, чтобы дать нам лучшее представление о том, с чем вы столкнулись.Не зная деталей, я бы предложил следующее:

  1. Добавьте -v к аргументам вашего исполняемого файла в диалоге отладки.Это напечатает имена ваших тестовых случаев по мере их выполнения.Последнее напечатанное имя, вероятно, является тестом, в котором происходит ошибка сегментации.
  2. Поместите точку останова в этот тестовый случай, когда вы вызываете тестируемый код.
  3. Отследить значение, которое вызвало ошибку (чаще всего, висячий указатель), и выяснить, почему она была NULL или неинициализирована.
...