Size: a a a

2021 June 30

M

Mikhail in pro.cxx
Я открыт к предложениям
источник

A

AR in pro.cxx
Вот один из вариантов, по быстрому отыскал среди старых исходников:
  #define assert(Expression)\
   ((void)( (!!(Expression)) || (\
   assert_function(#Expression, CODE_LOCATION) ? __debugbreak(), 0 : 0\
   ) ))
источник

M

Mikhail in pro.cxx
Это под винду. У меня gcc
источник

A

AR in pro.cxx
Это подо все. Макрос CODE_LOCATION разворачивается под свой компилятор. debugbreak замените на что-то свое.
источник

M

Mikhail in pro.cxx
Насколько я помню, __debugbreak() не работает в gcc
источник

A

AR in pro.cxx
Смысл такого макроса в том, что он в IDE остановится прямо в месте кода. В GCC Есть свой аналог останова.
источник

D

Deathwish in pro.cxx
Ну имеют смысл они, если код писать под разные платформы или для отладки какой-нибудь
источник

D

Deathwish in pro.cxx
Вот там их сила
источник

M

Mikhail in pro.cxx
Мне нужен рантайм ассерт именно. Не в дебажной сборке
источник

D

Deathwish in pro.cxx
Ну это исключения обычно
источник

A

AR in pro.cxx
Ну вот как раз я для себя и делал. Там даже окошко появлялось с предложением отправить багрепорт, и возможность продолжить исполнение или выйти из программы.
источник

M

Mikhail in pro.cxx
Ну вот я и хочу обернуть в макрос, чтобы стандартизировать в коде
источник

M

Mikhail in pro.cxx
__debugbreak () вроде падает в рантайм? Там сишное исключение летит, которое не ловится
источник

A

AR in pro.cxx
Да. Верно. Но в assert_function будет окошко, где скажет что делать дальше. Три варианта - игнорировать, отправить багрепорт, упасть/войти в дебаг). Поведение зависит от релиза или дебаг-сборки (в релизе макрос может не содержать break, а вызывать что-то иное). Если вернет true, то выполнится брейк, иначе ничего не произойдет из-за тернарного оператора - т.е. будет игнор операции. Вам это не надо, я просто показал пример как ассерт макрос реализовать покрасивше.
assert_function кстати можно переопределить в классе, если нужно. И будет контексто-зависимый assert - или вызываться глобальный, или переопределенный.
источник

M

Mikhail in pro.cxx
Видимо рабочий вариант. Спасибо
источник

ПК

Побитый Кирпич... in pro.cxx
И ты на Раст съехал?
источник

AD

Andrey Davydov in pro.cxx
Ну я давно уже сам не пишу на C++, только другим рассказываю как это здорово :)
источник

S

SupaproBot in pro.cxx
@malaria_groznaya Ваш вопрос перемещён в чат @supapro . Там Вам с радостью помогут с Вашей проблемой :)
источник

BU

Boris Usievich in pro.cxx
👌
источник

 P

 ‌‌Gleb Pilipets... in pro.cxx
У кого-то была така ситуация - уже 2 день не могу отловить проблему?
1. Есть рабочий проект как .exe, который использует CPR, spdlog, boost-asio. Теперь я хочу создать .dll из этого проекта.
2. Я пишу нужные экспорты для .dll и линкую этот .dll в новосозданный .exe - всё виснет не понятно, почему. То на аллокаторе, то на io_context.

В инете пишут, что boost-asio не будет работать в .dll без #define BOOST_ALL_DYN_LINK. Сделал этот define - io_context начал выполнять действия, но прога все равно виснет при вызове SPDLOG_LOGGER_INFO из метода внутри io_context.

Я понимаю, что контекста может не хватать, но может сталкивались с подобным поведением - куда хоть смотреть?
источник