Перейти к содержанию
    

Есть ли возможность программе определить, что она запущена под отладчиком

Добрый день, коллеги!

 

Перечитал по диагонали руководство на отладчик (IAR 9.10 ARM), и мне даже стало казаться, что то, чего я хочу - невозможно. Но всё же задам вопрос, вдруг есть иной путь.

 

Есть ли возможность условной компиляции ПО (как с помощью директив препроцессора) для случаев запуска под отладчиком J-Link и без него? Термин "компиляция" выбран неверно, т.к. компилятору далеко неважно, что там будет и где отлаживаться. В общем, есть ли возможность получить что-то наподобие этого?

void foo() {
#if WE_ARE_RUNNING_UNDER_DEBUGGER
	foo_under_debugger();
#else
 	foo_release();
#endif
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Бинарник должен быть разный? Тогда это и есть условная компиляция, которая делается заданием WE_ARE_RUNNING_UNDER_DEBUGGER в одной из конфигураций. 

image.thumb.png.7a0a7d60615146e0ba2915eee0df213f.png

image.png.e09bd08defc9ce3f1ca74a9243f65552.png

image.thumb.png.4bbb5076ae9aa10a0f17a5d5368e126c.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, VladislavS said:

Бинарник должен быть разный?

Не обязательно.

1 hour ago, VladislavS said:

Тогда это и есть условная компиляция, которая делается заданием WE_ARE_RUNNING_UNDER_DEBUGGER в одной из конфигураций. 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 минут назад, haker_fox сказал:

Но всё же именно хочется понять, возможно ли программой определить факт того, что она запущена под отладчиком?

Так программой (в run-time) или, все же, при компиляции? Если программой, то в Cortex-M есть C_DEBUGEN.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 minutes ago, uriy said:

Какой процессор?

Cortex-M0/M3/M4(F).

10 minutes ago, Arlleex said:

Так программой (в run-time) или, все же, при компиляции?

Программой. Но 100% достоверно.

При компиляции это невозможно. Я пример неудачный привёл в исходном сообщении. Компилятор ничего не знает про то, что программа будет запускаться из под отладчика. А конфигурации, о которых сказал @VladislavS, мне не подходят.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если нужно определить процессором, что отладчик запустил отладочную сессию (а не просто прошил Flash, условно, и запустил программу), то C_DEBUGEN подойдет.

Активно пользовался при написании загрузчиков всяких. Экспериментально в одном проекте даже сделал механизм затирания прошивки при попытке подключения отладчика.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, Arlleex said:

Активно пользовался при написании загрузчиков всяких.

Отлично! Это значит, что механизм - надёжный! То, что надо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...