Если вы переходите к коду FastMM, то происходят операции с памятью. Код, который вы показали, не имеет никаких операций с памятью, поэтому ваш вопрос не завершен. Я постараюсь угадать, что ты имел в виду.
Когда подпрограмма имеет локальные переменные управляемых компилятором типов (таких как строки, интерфейсы или динамические массивы), пролог функции выполняет нетривиальную работу. В прологе также настраиваются контрольные значения входных параметров. Отладчик представляет пролог в строке begin
функции. Если текущая точка выполнения - это та строка, и вы «входите» в нее, вы попадете в код RTL для управления специальными типами. (Я бы тоже не ожидал, что там будет задействован FastMM, но, может быть, все изменилось по сравнению с тем, к чему я привык.) В этой ситуации легко сделать «перешагнуть» строку begin
вместо Это; используйте F8.
Если вы действительно нажимаете F7, когда вводите выделенную строку, значит, вы делаете это неправильно. Это шаг в строку begin
, , а не строку, где вызывается DoStuff
. Так что, если вы попадете в код FastMM, это не имеет ничего общего с реализацией DoStuff
. Для отладки вызова на DoStuff
текущая точка выполнения должна уже быть строкой с вызовом на ней.
Если вы хотите отлаживать DoStuff
только на итерации 23498938, тогда вы можете установить условную точку останова в этой функции. Щелкните в желобе, чтобы создать нормальную точку останова, а затем щелкните ее правой кнопкой мыши, чтобы отобразить его свойства. Там вы можете определить условие, которое будет оцениваться каждый раз, когда выполнение достигает этой точки. Отладчик остановится только тогда, когда условие выполнено. Нажмите F8, чтобы «перешагнуть» вызов DoStuff
, и если условие истинно, отладчик остановится там, как если бы вы нажали F7 вместо этого.
Вы можете переключать опцию «использовать отладочные DCU», чтобы не входить в большинство блоков RTL и VCL. Я не знаю, включен ли FastMM в этот набор. Основное различие заключается в том, были ли скомпилированные DCU с отладочной информацией. Этот параметр изменяет путь к библиотеке , чтобы включить или исключить подкаталог, в котором находятся отладочные DCU. Я думаю вы можете настроить набор включенных или исключенных каталогов отладки так, чтобы пользовательский набор каталогов добавлялся или удалялся на основе параметра «отладочные DCU».
Вернуться к точкам останова. Вы можете настроить группы точек останова , назначив имена точкам останова. Вы можете использовать расширенную точку останова, чтобы включить или отключить именованную группу точек останова при ее передаче. (Группы точек останова могут иметь только одну точку останова, если хотите.) Так, например, если вы хотите разрывать только в местоположении X, если вы также прошли какое-то другое местоположение Y в вашей программе, вы можете установить отключенную точку останова в X и неразрывную точку останова на Y. Установите настройку «включить группы» на Y, чтобы включить группу X.
Вы также можете воспользоваться отключенными точками останова без автоматического включения и выключения. Ваши точки останова появляются в окне отладчика «точки останова». Если вы проходите через DoStuff
и решите, что хотите проверить bla
на этот раз, перейдите к окну точки останова и включите точку останова на bla
. Нет необходимости переходить к реализации bla
, чтобы установить точку останова.
Подробнее о расширенных точках останова см. Использование неразрывных точек останова в Delphi и статью Кэри Дженсена, опубликованную несколько лет назад.