Как я могу запретить GCC исключать код внутри , если (0) заблокирован?
Когда я использую Visual Studio, один из моих методов отладки заключается в том, чтобы поместить такой код в мою программу:
if (0)
do_some_debug_printing_and_checking();
Затем, когда ударяется точка останова, я нажимаю на строку do_some_debug_printing_and_checking(), выбираю "установить следующую инструкцию" и заставляю ее выполнять.
Когда я использую gcc/gdb в качестве исходного кода, "set next statement" больше не работает, поскольку GCC просто удаляет код из инструкции if (0).
Я использую флаг -O0, чтобы отключить оптимизацию. Я также попробовал флаги -fno-dce -fno-tree-dce, чтобы явно отключить исключение скрытого кода, но это не влияет: содержимое if (0) просто не присутствует в двоичном файле, и я не могу использовать установить следующий оператор, чтобы перейти в него.
Есть ли хороший способ сказать gcc отключить удаление содержимого if (0)?
Edit:
Спасибо за обходной путь "дополнительная переменная", однако мне не нравятся 2 вещи:
- Это еще одна строка кода
- Он не будет автоматически оптимизирован, когда я создам версию выпуска и хочу, чтобы эти отладочные вещи исчезли. Конечно, я могу использовать # ifdef-s, но это еще больше дополнительных строк.
Действительно, нет никакого способа заставить GCC сохранить этот мертвый код?