Как я могу заставить VB6 войти в отладчик от выполнения программы без точки останова? - PullRequest
2 голосов
/ 13 ноября 2008

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

Заранее спасибо!

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

Ответы [ 4 ]

5 голосов
/ 14 ноября 2008

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

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

3 голосов
/ 13 ноября 2008

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

2 голосов
/ 14 ноября 2008

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

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

Использование F8 и Shift-F8 для перехода по программе

Добавление остановок (и последующее удаление)

Другие

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

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

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

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

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

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

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

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

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

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

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

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

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

1 голос
/ 13 ноября 2008

Вы можете нажать клавишу F8, чтобы шаг за шагом пройти по коду. Кроме того, вы можете нажать SHIFT-F8, чтобы переходить от строки к строке.

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

EDIT:

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

Debug.Assert False

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...