Отладка юнит-теста в C с использованием check - PullRequest
7 голосов
/ 30 октября 2009

Я пытаюсь использовать check инфраструктуру модульного тестирования для моего C-приложения. Но я не могу использовать отладчик (gdb) с ним из-за двух моментов:

  • во-первых, проверьте использование некоторых сложных макросов (START_TEST и END_TEST), и у отладчика возникла проблема с установкой точки прерывания в моем коде между этими двумя макросами (на самом деле, я могу установить программную точку останова, но gdb никогда не видит)

  • во-вторых, проверьте, определите какие-то исключения, переопределив поведение прерывания. Следовательно, когда я пытаюсь установить аппаратную точку останова, тест не пройден и завершается, потому что проверка рассматривает аппаратную точку останова как неудачу моего теста.

Кто-нибудь уже сталкивался с этой проблемой и имеет решение?

Ответы [ 4 ]

11 голосов
/ 30 октября 2009

Посмотрите на режим без вилки :

Установите флажок обычно для создания отдельного адресного пространства. Это позволяет поймать и сообщить о сигнале или преждевременном выходе, а не отключить всю тестовую программу, и обычно очень полезно. Однако, когда вы пытаетесь отладить, почему произошла ошибка сегментации или другая программная ошибка, разветвление затрудняет использование средств отладки.

5 голосов
/ 04 сентября 2010

На самом деле, вы МОЖЕТЕ использовать режим вилки тоже.

GDB имеет две интересные опции, связанные с поведением вилки:
- detach-on-fork (установите значение false)
- follow-on-fork (родитель или ребенок; я всегда беру ребенка)

Это заставит GDB следовать дочернему процессу. Когда дочерний процесс завершился, вы должны вручную вернуться к родительскому процессу с помощью команды inferior.

0 голосов
/ 19 мая 2018

Я прочитал это , и он предлагает очень простое решение:

gdb > set environment CK_FORK=no

, который работал для меня. Затем я мог бы установить точку останова в функциях, которые вызывают тестовые случаи (то есть проверяемые функции), и она сломалась в нужном месте.

0 голосов
/ 30 октября 2009

Попробуйте TAP (Test Anything Protocol) ... намного проще в реализации, доставке и отладке. Это также очень легко сделать valgrind -наведомо и имеет тенденцию играть лучше с gdb.

...