2015-06-22 4 views
0

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

Как вы устанавливаете Delphi только для запуска по одной линии за раз и вам нужно выполнить ее перемотку перед запуском следующего?

+0

Вы говорите об простой отладке при разрывах строк, не так ли? И технически, даже если вы не отлаживаете строку за строкой, ваше приложение все равно выполняет одну строку за раз в любом случае (за поток). –

+0

Показать панель «debug» и навести курсор на кнопки, чтобы увидеть подсказки. –

+1

«мы использовали его так, чтобы при запуске он выполнял только одну строку за раз». Я не знаю, что вы спрашиваете, но помните, что вы можете установить «счетчик сеансов» на точки останова отладчика, так что он не останавливается на этой строке каждый раз. V удобно, если вы можете сузить то, что вас интересует, к N-й точке времени. – MartynA

ответ

5

F7 выполнит одну строку (и перейдет в подпрограмму).

F8 выполнит одну строку (но не будет входить в подпрограмму, так что на самом деле может выполняться множество строк).

Ключи быстрого доступа документированы here.

9

Запустите программу в отладчике. Обычно вы запускаете это, нажимая F9, но это запустит программу. Вместо этого вы должны использовать команду Step Over, с ярлыком F8. Затем каждый раз, когда вы хотите перешагнуть через линию, снова нажмите F8. Как следует из названия, если линия имеет вызов функции, вы будете «шагать» по этому вызову. Для входа в функцию используйте Step Into, F7. Когда вы это сделаете, отладчик переместится в первую строку функции.

Если вы запустите программу в степпинге, вам может потребоваться некоторое время, чтобы добраться до интересующей вас точки. Получить там более быстро, установив точки останова с F5 ключ , и по Запуск до курсора действие, ярлык F4.

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

Для получения дополнительной информации, пожалуйста, обратитесь к документации: http://docwiki.embarcadero.com/RADStudio/en/Overview_of_Debugging

3

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

Один из способов сделать это - разместить точку останова на одной из строк внутри цикла, которая выполняется каждый раз (не внутри какого-либо условного блока или другого вложенного цикла), запускающего приложение в режиме отладки (F9 ключевой ярлык), который приведет к остановке вашей программы после достижения этой точки останова.

Затем вы используете ключ F9, чтобы переходить через эту точку останова на следующую и подсчитывать, сколько раз ваша программа останавливалась на этой конкретной точке останова.


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

Так, чтобы избежать вышеупомянутых проблем, вы можете попросить отладчика помочь вам с подсчетом. Как ты делаешь это?

Вы делаете это в два этапа.

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

Breakpoint properties dialog

Собственности, что вы заинтересованы здесь Pass count.

Обычно это свойство используется для разрыва вашей программы после того, как определенная точка останова передается определенное время.

Но в нашем случае мы не заинтересованы в остановке нашей программы, а вместо этого рассчитываем количество проходов, поэтому вы должны установить ее значение выше ожидаемого числа итераций цикла, чтобы эта точка останова не вызывала программа для остановки вообще.

Затем следующим шагом является добавление дополнительной точки останова в первую строку, которая будет выполнена после цикла.

Итак, ваша установка теперь должна остановить вашу программу сразу после цикла, и вы можете оценить, сколько раз была первой точкой останова (одна внутри вашей петли), пройдя, перемещая курсор мыши над ней.

Как вы заметите, количество проходов отображается как Pass count: X of Y, где X - это количество раз, которое точка останова уже передана, а Y - количество проходов, указанное вами в свойствах точки останова.


Этот второй подход делает подсчет итерации цикла намного проще, особенно если у вас есть несколько десятков или даже несколько сотен итераций цикла.

Но имейте в виду, что этот подход может использоваться только для подсчета числа итераций цикла при первом использовании цикла. Зачем?

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


Однако вы можете заставить отладчик сбросить счетчик, установив его на 0 и оставив программу остановленной на нем. После этого вы можете снова установить свойство breakpoint Pass count на некоторое большее число.

ПРИМЕЧАНИЕ. Сброс счетчика прохода точки останова, как описано выше, требует, чтобы вы вступили в одну итерацию цикла, чтобы число возвращаемых результатов цикла было опущено на один (итерация цикла, в которой ваша программа остановилась, чтобы сбросить счетчик).

+2

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

+0

@DavidHeffernan Если я честен, я обычно иду и добавляю дополнительную переменную, как вы предлагали. Но недостатком с добавлением дополнительной переменной является то, что вам нужно изменить свой код и перестроить проект, что иногда не представляется возможным. Хотя самое большое преимущество моего предлагаемого подхода заключается в том, что вы можете использовать его в любое время. Вы можете настроить его даже после того, как приложение уже запущено внутри сеанса отладки. И вам не нужно делать какие-либо модификации кода для этого. – SilverWarior

+0

Это еще быстрее сделать это по-моему, поэтому вы тоже это делаете! –

1

Со всем разговором о добавлении контрольных точек и переходе по коду я хочу предложить еще один вариант: использовать профилировщик.

С профилировщиком (например, AQtime) вы можете легко узнать, как часто выполняется какая-либо функция или строка в вашей программе, не добавляя дополнительных переменных или не перешагивая код в отладчике.

Если единственная информация, которую вас интересует, - это количество раз, когда цикл выполняется, я думаю, что это самый чистый вариант.

+0

AQTime не скажет вам, сколько раз вводился цикл. Вы можете получить эту информацию косвенно из числа вызовов функций **, если ** рассматриваемая функция только тождественно вызывается один раз за итерацию цикла. Этот подход работает только в том случае, если ваше приложение структурировано таким образом - оно не будет работать во всех случаях. Намного проще просто добавить счетчик циклов, если он еще не существует, и поместите контрольную точку после цикла, чтобы проверить ее. –

+0

AQTime скажет мне, как часто выполняется строка, которая дает мне достаточно информации, чтобы узнать, как часто вводится цикл. –

+0

Это в профилеровщике покрытия? Возможно, я просто думаю о профилировщике производительности - это тот, который я всегда использую ... –

 Смежные вопросы

  • Нет связанных вопросов^_^