Вы можете просто вызвать DebugBreak () из вашей программы.
Согласно странице MSDN , DebugBreak выполняет следующие действия:
Вызывает возникновение исключения точки останова.
в текущем процессе. Это позволяет
вызывающий поток, чтобы сигнализировать
отладчик для обработки исключения.
Чтобы вызвать исключение точки останова в
другой процесс, используйте
Функция DebugBreakProcess.
Затем вы можете подключить ваш отладчик и продолжить запуск программы.
Единственная проблема, связанная с этим решением, заключается в том, что вам необходимо сделать условный код DebugBreak () в коде так, чтобы он не прерывался каждый при запуске программы. Возможно, вы достигнете этого с помощью переменной среды, параметра реестра или параметра, который планировщик передает программе, чтобы гарантировать, что он ломается при запуске.
Пример кода
Вот пример неопробованного кода, читающего переменную среды:
int main()
{
char *debugBreakChar = getenv("DEBUG_BREAK");
int debugBreak = atoi(debugBreakChar);
if (debugBreak)
{
DebugBreak();
}
// Rest of the program follows here
}
Теперь все, что вам нужно сделать, это установить переменную среды в качестве системной переменной и убедиться, что она доступна из того же контекста оболочки, что и планировщик (перезагрузка достигнет этого):
set DEBUG_BREAK=1
Теперь программа прервется при запуске, что позволит вам подключить отладчик. Изменение переменной среды на 0 или отмена ее установки позволит программе нормально работать.
Переменные среды немного сложны в этом отношении, так как они основаны на контексте, и вам нужно знать, что планировщик работает из того же контекста среды. Значения реестра лучше, чем это, и вы можете прочитать значение реестра, используя вместо этого RegQueryValueEx в своем коде (вам нужно включить windows.h, чтобы использовать эту функцию).