Подтвердить что ты не робот

Как пропустить код сборки при отладке в Delphi?

Иногда при отладке, особенно при перехвате исключения и последующем вызове через деструкторы, Delphi выполняет много кода сборки. Кажется, что Hit Shift + F8 вызывает хаос.

Могу ли я сказать отладчику пропустить код сборки автоматически?

4b9b3361

Ответ 1

По моему опыту, подавляющее большинство таких ассемблерных кодов находится в единицах VCL или RTL.

Если вы скомпилируете с Debug.dcu " отключено, тогда отладчик не выполнит этот код. Однако он также не будет проходить через любой другой код VCL/RTL - ассемблер или Pascal. Он будет все еще проходить через любой код, который не является частью VCL/RTL, при условии, что для проекта включена опция Отладка.

Compiler options dialog

Отключение отладки VCL/RTL позволяет отлаживать любую конкретную проблему, которая может быть проще или сложнее, зависит от ваших конкретных обстоятельств, но обычно то, что происходит внутри кода VCL/RTL, имеет мало значения, если и до тех пор, пока вы устранили возможность некоторой ошибки в вашем собственном коде, а затем должны исследовать потенциальную ошибку в самом VCL/RTL.

Для меня у меня " Debug.dcus" выключен, если я не нуждаюсь в них.

Ваш пробег может отличаться.

Ответ 2

Если вы видите код ассемблера, вы, вероятно, находитесь в представлении CPU Alt-F2. Просто закройте представление CPU (клавиша эвакуации на старой Delphi или закройте ее вкладки), и вы продолжите шаг в исходном коде pascal (например, нажмите F7 или F8).

Если вы видите код ассемблера в середине файла .pas(в блоке asm ... end), вы можете попытаться подойти к нему (на уровне end) и нажать F4 (сдвиг F8 глючит). Но имейте в виду, что он может выйти не на end, а во внутренний код ret для ассемблера. Поэтому мой личный совет: если вы не знаете об ассемблере, чтобы отобразить стек вызовов (в этом окне отображаются вызовы функций, которые привели вас к вашему текущему местоположению программы и аргументы, переданные каждому вызову функции) и дважды щелкните на родительском вызывающий абонент. Это будет всегда безопасно.

Для дополнительной информации об отладке, например, в этой статье.

Ответ 3

Вы можете использовать директиву {$ D-}, чтобы отключить отладку для блока кода. Я думаю, что это позволит вам достичь того, чего вы хотите.

Также - не используйте shift F8 в коде сборки, я считаю, что он вызывает всевозможные проблемы - лучше поместить курсор после блока и F4 до этого.

Ответ 4

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

Кстати, эти ссылки SO полезны: this и this