Полнофункциональный диалог подтверждения C ++? - PullRequest
4 голосов
/ 12 июня 2009

Я ищу хороший, полнофункциональный макрос утверждения C ++ для VisualStudio. С такими функциями, как возможность игнорировать утверждение один раз или всегда, возможность разбить точно, где вызывается макрос (а не внутри макрокода), и получить трассировку стека.

Прежде, чем мне пришлось сесть на корточки и написать один, я решил спросить, знает ли кто-нибудь о каких-либо доступных.

Есть предложения?

Спасибо!

Ответы [ 5 ]

8 голосов
/ 12 июня 2009

См. блог Чарльза Николсона для хорошего обсуждения макроса assert. Его решение разбивает отладчик на ошибочную строку кода (а не внутри обработчика неудачных утверждений), и он также решает проблему получения предупреждений о неиспользуемых переменных, когда утверждения отключены, без каких-либо затрат времени выполнения.

1 голос
/ 12 июня 2009

Вот ссылка на статью, которую я написал для DDJ, в которой, помимо прочего, описана библиотека, которая делает большую часть того, что вы ищете. Хотя я не просто использую макросы, я также реализую функции в DLL.

http://www.ddj.com/architect/184406106

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

1 голос
/ 12 июня 2009

_ASSERTE разрывается именно там, где вы хотите, но не соответствует другим вашим критериям.

_ASSERTE приятно, потому что он отображает фактический текст подтверждения вместе с именем файла и номером строки. Это означает, что вы можете сделать это:

_ASSERTE(bufLen > 0 && "bufLen needs to be greater than 0");
0 голосов
/ 11 февраля 2015

Я выпустил PPK_ASSERT. Хотя диалоговое окно не открывается, в Windows обработчик по умолчанию открывает консоль, где вы можете прочитать сообщение о подтверждении и решить, какое действие предпринять.

#include <pempek_assert.h>

int main()
{
  float min = 0.0f;
  float max = 1.0f;
  float v = 2.0f;
  PPK_ASSERT(v > min && v < max, "invalid value: %f, must be between %f and %f", v, min, max);

  return 0;
}
0 голосов
/ 12 июня 2009

OpenOffice имеет некоторый код подтверждения , который имеет возможность входа в окно сообщения. Наверное, не совсем то, что вы хотите, но, может быть, поучительно?

...