Давайте рассмотрим желаемые свойства. Код должен
- быть в состоянии точки останова
- четко объясните, что это только для точек останова.
- не будет сразу виден пользователю, который его запускает.
- не влияет на поведение во время выполнения (включая время выполнения).
В зависимости от того, какой оптимизатор вы используете, наилучший код точки останова может отличаться.
Я не очень люблю добавлять сборки. Он не переносимый и портит анализ окружающего кода компилятором. Даже если это не работает, это может повлиять на производительность.
Печать видна пользователю. Когда вы разговариваете с отладчиком, вы чувствуете, что делаете что-то не так. Я слышал истории о том, как ошибки в потоке исчезали, когда код запускался в отладчике (и именно так отладчики получили свое имя: D). Я бы сказал, что этого следует избегать, и проблемы, которые он решает, должны решаться с помощью лучшего отладчика (возможно, простого в использовании обезьяньего патчера?).
Я думаю, что лучший код - bool breakpoint_dummy = /* the value means nothing */ false;
. Он вписывается в 80 столбцов, объясняет, что это такое, и если ваш оптимизирующий компилятор не может справиться с неиспользуемыми переменными, он (надеюсь?) Скомпилируется в xorl eax, eax
, быстрый и маленький фрагмент кода (я бы предположил ). В общем, нули дешевле, чем; -)