2008-11-13 2 views
2

Я пытаюсь наблюдать за выполнением приложения VB6, и я столкнулся с проблемой, потому что, как только я вхожу в отладчик, а затем нажимаю Continue, он больше не позволяет мне пройти через код, пока я не удалю другую точку останова. Я хочу, чтобы иметь возможность выполнять программу, не перешагнув что-то, пока я не попаду в точку, где я хочу посмотреть, как она выполняется. В идеале это было бы чем-то вроде нажатия клавиши, когда я нажимал кнопку, чтобы «вступить» в эту функцию.Как заставить VB6 вводить отладчик из выполнения программы без точки останова?

Заранее благодарен!

[EDIT]: Я знаю, что могу использовать точки останова, чтобы остановить выполнение. Чтобы быть более ясным, проблема в том, что я не знаю, где выполняется выполнение, поэтому я не могу установить точку останова там (потому что я не знаю, где это). Вот почему я, по сути, хочу сказать, «после этого следующего, что я делаю, сломается, несмотря ни на что». Похоже, эта функциональность не существует, но я все еще держу пальцы.

ответ

5

Пока код работает, нажмите ctrl + break (или кнопку «VCR pause» в IDE), затем нажмите F8 (или выберите «Шаг в меню отладки в среде IDE»), чтобы продолжить запуск приложения. Следующее действие приведет к разрыву выполнения.

Обратите внимание, что причина, которая вызывает перерыв, не всегда будет той, на которую вы надеялись. Особенно раздражает событие _MouseOver, которое мешает вам делать мышь вниз или таймер, запускающий quckier, чем вы можете выполнить свое действие. Некоторые перерывы могут даже быть фатальными в отношении запуска вашего приложения, например. где были подключены сообщения Windows (подклассы). Также подумайте, не может быть обработчик события в коде (пока) для вашего действия, где он может сломаться. Но обычно этот метод определяет, где вы должны установить свою точку останова.

1

Вы можете нажать клавишу F8 для перехода по коду по строкам. В качестве альтернативы вы можете нажать SHIFT-F8 для перехода по строкам.

F8 проведет вас к функции, где SHIFT-F8 перешагнет вас на функцию. Если вы нажмете на меню DEBUG в VB IDE, вы увидите и другие варианты.

EDIT:

Вы также можете поставить постоянную точку останова в коде с помощью:

Debug.Assert False 

Делая это так, то «точка останова» сохраняется в коде. При компиляции приложения код отладки игнорируется.

3

Существует инструкция Stop, доступная для использования в VB6, которая будет отбрасываться в отладчик, когда оператор выполняется из кода, запускаемого через среду IDE. (Просто не забудьте удалить все инструкции Stop из кода при компиляции сборки выпуска.)

+0

Я предполагаю, что вы были отмечены, потому что вам не нужно удалять операторы Stop перед компиляцией, потому что они просто игнорируются. – onedaywhen 2008-11-14 08:25:21

2

Существует несколько методов, которые вы можете использовать.

Эти два были упомянуты

Использование F8 и Shift-F8, чтобы пройти через программу

Добавление Остановки (а затем извлекая)

Другие

использовать глобальную переменную для создания Коллекция. Используйте его как стек, и у вас есть подпрограммы, которые вам интересны для push и pop.И наоборот, ничего не вытаскивайте, и вы получите след.

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

Сделайте глобальную строку и установите свои процедуры при вводе их. Контролируйте его через Watch.

Используйте Debug.Print в своем коде. Также в отличие от Stop вы можете оставить их без выполнения производственного кода.

Используйте объект файловой системы, чтобы создать текстовый файл, который будет действовать как журнал.

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

Это все методы, которые я использовал при отладке приложения. Если мне нужно было контролировать приложение, я бы использовал Debug.Print. Если это не делает компиляцию трюка, тогда войдите в текстовый файл.

Если у вас есть что-то действительно сложное, я рекомендую переместить весь ваш код из событий в классы, реализующие Command Pattern. Ваши классы команд должны взаимодействовать с формой и интерфейсом.

В методе Execute классов команд вы будете что-то вроде

<save the current state> 
<Do your original code> 
<save the modified state> 
<push the command onto a stack> 

Что будет происходить в том, что вы завершаете список всех команд, которые выполняются (даже такие вещи, как при наведении курсора мыши) с государством они столкнулись и изменили состояние. Затем вы можете изучить каждый объект по очереди, чтобы узнать, что происходит. Это почти эквивалент создания Undo/Redo

Обратите внимание, что такие вещи, как MouseOver, могут вызывать много классов в стеке команд, поэтому вам придется тщательно структурировать свои тесты или перегружать информацию. Помните, что вы всегда можете пропустить нажатие команды в стек.

Недостатком использования команд является то, что вы отказались от отладки при перепроектировании. Вы должны решить, стоит ли это делать.