Отладка приложений

       

Быстрое прерывание на произвольной функции


При установке точек прерывания существует много интересных возможностей, связанных со способностью отладчика Visual C++ оценивать выражения. Если известно имя функции, на которой нужно выполнить прерывание, то вместо утомительного поиска по всему исходному коду достаточно ввести это имя в редактируемое поле Break at. Если в одном из загруженных модулей существует соответствующий символ, то отладчик поместит точку прерывания на первую инструкцию этой функции. Если программа остановлена в отладчике, а имя введенной функции неправильно, то отладчик выведет панель с сообщением. При вводе имени С++-функции нужно вводить также и квалификатор соответствующего класса. Например, чтобы организовать прерывание на методе Опок класса coiaiog из библиотеки MFC, следует ввести coialog: :0nOk.

Отладчик достаточно развит, чтобы учитывать перегруженные (overloaded) члены классов, и он подсказывает имена конкретных версий перегруженных функций в специальном окне. Например, если для установки точки прерывания в MFC-приложении ввести в поле Break at имя cstring: :cstring как имя функции, на которой следует установить точку прерывания, то отладчик не будет знать, какая версия конструктора класса cstring интересует программиста и подскажет их в списке Symbols диалогового окна Resolve Ambiguity, показанного на рис. 5.2. В этом окне перечисляются (в расширенном синтаксисе точек прерывания) восемь конструкторов cstring, из которых и нужно выбрать подходящую версию.

Рис. 5.2. Диалоговое окно Resolve Ambiguity

Самый легкий способ устанавливать точки прерывания на сложных функциях, таких как operator-функции классов, состоит в том, чтобы напечатать достаточно информации для показа в диалоговом окне Resolve Ambiguity. Например, MFC-класс cstring имеет перегруженные операторы назначения, и чтобы увидеть их список в окне Resolve Ambiguity, нужно напечатать в поле Break at cstring: :operator= (operator-функция класса cstring). Чтобы выполнить прямую установку точки прерывания, в поле Break at можно также указать параметры функции (если они известны). Например, вместо CString: :operator= можно напечатать CString: :operator=(const char *) И вполне обойтись без диалогового окна Resolve Ambiguity.



Содержание раздела