Delphi: как выполнить отладку, пока вы не вернетесь к исходному файлу?

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

Если я выберу перерыв, я смогу увидеть, откуда исходит исключение, но если перерыв находится в библиотеке или системном файле, а не в одном из моих исходных файлов (скажем, исключение находится в System.pas или Controls.pas), мне нужно вручную выполнить шаг вперед, используя < kbd>F8, пока он не вернется к одному из моих файлов, чтобы я мог видеть, какая часть моего кода вызвала исключение.

Это может занять много времени.

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

Есть ли способ сказать

  • бегите вперед с выполнением, пока не дойдете до файла X или
  • пока вы не вернетесь в конкретный файл проекта.

Меня также интересует из общего любопытства, как с этим справляются другие компиляторы/IDE.

Извиняюсь, если я не сделал это так ясно, как я должен.


person SamH    schedule 20.04.2009    source источник


Ответы (3)


Это можно решить с помощью окна Просмотр стека.

  1. Откройте окно просмотра стека (CTRL+ALT+S).
  2. Дважды щелкните метод в представлении стека, куда вы хотите вставить точку останова.
  3. Блок, содержащий вызывающий метод, открывается, и курсор устанавливается на вызывающий метод.
  4. Установите точку останова.
person Lieven Keersmaekers    schedule 20.04.2009

Есть еще более простой способ, чем предложение Ливена. Выполните первые 3 шага, как он их изложил, но не ставьте точку останова.

Проблема с размещением точки останова заключается в том, что вы должны очистить ее после этого, иначе вы попадете в отладчик каждый раз, когда будете проходить эту строку. Если вы хотите перейти только к определенной строке, а затем перейти к отладчику один раз, поместите курсор на эту строку (точку вставки, а не курсор мыши) и нажмите F4 (Перейти к курсору). Это как одноразовая точка останова.

person Mason Wheeler    schedule 20.04.2009
comment
@Mason, проблема в том, что ОП не знает, какая строка кода вызвала исключение. Это делает использование F4 нежизнеспособным решением. - person Lieven Keersmaekers; 20.04.2009
comment
Я не совсем понимаю. ОП не может найти строку, чтобы нажать F4, но может найти строку, на которой можно установить точку останова? - person Mason Wheeler; 20.04.2009
comment
Он не находит строку для установки точки останова. Перерыв Delphi при исключении включен. Это Дельфи останавливается на линии. Проблема ОП заключалась в том, что Delphi останавливается в системном блоке пользовательского блока. - person Lieven Keersmaekers; 20.04.2009
comment
Я это понимаю. Я имею в виду, в основном, следуйте своим шагам, но вместо того, чтобы устанавливать точку останова на шаге 4, просто вместо этого нажмите F4. Отредактировал сообщение, чтобы уточнить это. - person Mason Wheeler; 20.04.2009
comment
+1 @ Мейсон, извини, я неправильно понял. Вы правы конечно. Использование F4 в качестве шага 4 для установки точки останова действительно проще. - person Lieven Keersmaekers; 20.04.2009

Есть несколько способов:

  1. Используйте функцию "Следующая исходная строка" (Shift+F7)
  2. Используйте стек вызовов и дважды щелкните нужную функцию, добавьте туда точку останова и нажмите «Выполнить» (F9).
  3. Используйте функцию «Выход» (Shift+F8), пока не вернетесь к своему собственному коду.
person Daniel Rikowski    schedule 20.04.2009
comment
У меня немецкая версия Delphi, поэтому я не совсем уверен в этом заголовке меню для Shift+F7... - person Daniel Rikowski; 20.04.2009
comment
Я думаю, что F5 для установки точки останова в коде, а F9 для запуска в Delphi. Какую версию Делфи вы используете? - person Yogi Yang 007; 20.04.2009