haker_fox 61 29 мая, 2023 Опубликовано 29 мая, 2023 · Жалоба Добрый день, коллеги! Перечитал по диагонали руководство на отладчик (IAR 9.10 ARM), и мне даже стало казаться, что то, чего я хочу - невозможно. Но всё же задам вопрос, вдруг есть иной путь. Есть ли возможность условной компиляции ПО (как с помощью директив препроцессора) для случаев запуска под отладчиком J-Link и без него? Термин "компиляция" выбран неверно, т.к. компилятору далеко неважно, что там будет и где отлаживаться. В общем, есть ли возможность получить что-то наподобие этого? void foo() { #if WE_ARE_RUNNING_UNDER_DEBUGGER foo_under_debugger(); #else foo_release(); #endif } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 29 мая, 2023 Опубликовано 29 мая, 2023 · Жалоба Бинарник должен быть разный? Тогда это и есть условная компиляция, которая делается заданием WE_ARE_RUNNING_UNDER_DEBUGGER в одной из конфигураций. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 29 мая, 2023 Опубликовано 29 мая, 2023 · Жалоба 1 hour ago, VladislavS said: Бинарник должен быть разный? Не обязательно. 1 hour ago, VladislavS said: Тогда это и есть условная компиляция, которая делается заданием WE_ARE_RUNNING_UNDER_DEBUGGER в одной из конфигураций. Этот способ мне известен. Но всё же именно хочется понять, возможно ли программой определить факт того, что она запущена под отладчиком? Наверное, условная компиляция была не совсем удачным примером с моей стороны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uriy 5 29 мая, 2023 Опубликовано 29 мая, 2023 · Жалоба Условная компиляция это совсем не то. Какой процессор? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 29 мая, 2023 Опубликовано 29 мая, 2023 · Жалоба 19 минут назад, haker_fox сказал: Но всё же именно хочется понять, возможно ли программой определить факт того, что она запущена под отладчиком? Так программой (в run-time) или, все же, при компиляции? Если программой, то в Cortex-M есть C_DEBUGEN. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 29 мая, 2023 Опубликовано 29 мая, 2023 · Жалоба 10 minutes ago, uriy said: Какой процессор? Cortex-M0/M3/M4(F). 10 minutes ago, Arlleex said: Так программой (в run-time) или, все же, при компиляции? Программой. Но 100% достоверно. При компиляции это невозможно. Я пример неудачный привёл в исходном сообщении. Компилятор ничего не знает про то, что программа будет запускаться из под отладчика. А конфигурации, о которых сказал @VladislavS, мне не подходят. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 29 мая, 2023 Опубликовано 29 мая, 2023 · Жалоба Если нужно определить процессором, что отладчик запустил отладочную сессию (а не просто прошил Flash, условно, и запустил программу), то C_DEBUGEN подойдет. Активно пользовался при написании загрузчиков всяких. Экспериментально в одном проекте даже сделал механизм затирания прошивки при попытке подключения отладчика. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 29 мая, 2023 Опубликовано 29 мая, 2023 · Жалоба 6 minutes ago, Arlleex said: Активно пользовался при написании загрузчиков всяких. Отлично! Это значит, что механизм - надёжный! То, что надо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться