Как можно определить, выполняется ли программа в режиме отладки, используя код?

Как можно реализовать отдельные вставки кода, которые будут активироваться только при запуске приложения в отладчике, учитывая, что меня интересует именно режим отладки, а не использование "debug_assertion"?
  • 8 сентября 2024 г. 16:12
Ответы на вопрос 2
В языке программирования Rust можно определить, выполняется ли программа в режиме отладки, используя прямо флаг компиляции. Для этого вы можете воспользоваться указанием макроса `cfg!`. В Rust есть предопределённый флаг `debug_assertions`, который активен в режиме отладки, но если вы ищете способ сделать вставки кода, которые будут выполняться исключительно в режиме отладки, вы можете использовать условную компиляцию.

Вот как можно реализовать отдельные вставки кода, активируемые только в режиме отладки:

```rust
fn main() {
    // Код основной логики программы здесь

    // Вставка, активирующаяся только в режиме отладки
    #[cfg(debug_assertions)]
    {
        println!("Программа запущена в режиме отладки!");
        // Ваш отладочный код здесь
    }

    #[cfg(not(debug_assertions))]
    {
        println!("Программа запущена в режиме релиза!");
        // Ваш код для релиза здесь
    }
}
```

В этом примере:
- Условная компиляция `#[cfg(debug_assertions)]` позволяет выполнить блок кода только тогда, когда компиляция происходит в режиме отладки.
- Аналогично, `#[cfg(not(debug_assertions))]` используется для выполнения кода в режиме релиза.

Таким образом, используя стандартные инструменты языка Rust, вы можете разделять код для различных конфигураций сборки вашего приложения.
Для винды есть 
https://learn.microsoft.com/en-us/windows/win32/ap...
и
https://learn.microsoft.com/en-us/windows/win32/ap...

Получить доступ к ним можно через крейт windows.
раз https://microsoft.github.io/windows-docs-rs/doc/wi...

два https://microsoft.github.io/windows-docs-rs/doc/wi...

На линуксе есть файлик /proc/self/status
https://stackoverflow.com/questions/3596781/how-to...

На маке - хз, но тк там юникс, то можно предположить, что тоже есть /proc/self/status, но это уже не точно.

+ Ещё можно посмотреть на переменные окружения. Вполне вероятно, что дебаггеры оставляют там что-нибудь, но это направление пока не смотрел
Похожие вопросы