Breakpoints, установленная командой «ба» называется процессором или аппаратные точки останова.
Сначала хорошие новости
Легко установить аппаратную точку останова. Вам нужно будет установить один из регистров отладки процессора (DR0, DR1, DR2 или DR3) с адресом данных и установить регистр DR7 управления отладкой с полями для установки размера памяти и типа доступа. Инструкция (в x64 ассемблере) выглядит следующим образом:
MOV бараков, DR0
Очевидно, вам придется каким-то образом выполнить эту команду ассемблера с вашего языка выбора, или использовать Interop в C++ и встроенный ассемблер, но это проще, чем, например, установить контрольную точку программного обеспечения.
Теперь плохие новости
Прежде всего, на машинах SMP вы должны сделать это для всех процессоров, которые могут коснуться вашего кода. Это, вероятно, разрешимо, если вы настраиваете сродство к процессору для процесса или выполняете отладку на машине с одной обработкой. Во-вторых, в архитектуре Intel всего 4 процессора отладки. Если вы попытаетесь установить контрольные точки процессора с помощью WinDbg, после 4-го он будет жаловаться на Too many data breakpoints for thread N
после того, как вы нажмете g
.
Я предполагаю, что вся цель, о которой вы спрашиваете об автоматизации, состоит в том, что слишком много объектов для установки контрольных точек вручную. Так как вы все равно ограничены 4 ba
точками останова, автоматизировать это не так много.