Delphi: Как отлаживать запуск, пока не вернетесь к исходному файлу? - PullRequest
6 голосов
/ 20 апреля 2009

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

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

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

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

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

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

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

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

Ответы [ 3 ]

12 голосов
/ 20 апреля 2009

Вы можете решить эту проблему с помощью окна Stack View .

  1. Откройте окно просмотра стека ( CTRL + ALT + S ).
  2. Дважды щелкните метод в представлении стека, в который вы хотите вставить точку останова.
  3. Откроется блок, содержащий метод вызывающего абонента, и курсор будет помещен на метод вызывающего абонента.
  4. Установите точку останова.
5 голосов
/ 20 апреля 2009

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

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

3 голосов
/ 20 апреля 2009

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

  1. Использовать функцию «Следующая исходная строка» (Shift + F7)
  2. Используйте стек вызовов и дважды щелкните нужную функцию, добавьте точку останова и нажмите «Выполнить» (F9).
  3. Используйте функцию «Выход» (Shift + F8), пока не вернетесь к собственному коду.
...