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


Точки прерывания Windows-сообщений - часть 2


При написании данного раздела автор отлаживал программы пакета Visual C++ 6.0 Service Pack 3, и чтобы выполнять прерывание на сообщении WM_PAINT только от своего класса, он установил расширенную позиционную точку прерывания со следующим описателем:

{,WINCORE.CPP,}.1584 when (this=Ox0012FE74)&&(message==OxF)

Рис. 5.5. Вкладка Messages для установки точек прерывания от Windows-сообщений

При использовании точки прерывания с выражением "this. ..&&.. .message" нужно проявлять осторожность, потому что указатель this, вероятно, изменяется в зависимости от способа выделения памяти вашему классу и от изменений, вносимых в отлаживаемый код. Если же необходимо быстро установить точку прерывания, то всегда можно добавить метод обработки (с помощью мастера классов Class Wizard) и установить на нем простую (не расширенную) позиционную точку прерывания.

В этой главе много внимания уделено расширенным точкам прерывания. В листинге программы AdvancedBP показаны все типы точек прерывания, кроме прерываний от Windows-сообщений. Синтаксис точек прерывания каждого типа показан в виде строчных комментариев в исходном коде программы (что позволяет видеть соответствующие описатели без открытия диалогового окна Breakpoints). Настоятельно советую всем разработчикам попрактиковаться в установке расширенных точек прерывания в собственных программах. Поразительно, как много полезного можно узнать при этом и об отладчике, и о собственном проекте!

Общий вопрос отладки

Почему точки прерывания исчезают или перескакивают с места на место?

Содержать в порядке точки прерывания исходного кода помогает редактор интегрированной среды разработки (IDE) Visual C++, потому что именно он удерживает точки прерывания на соответствующей строке кода. Если приходится редактировать исходный код вне IDE, и точка прерывания оказывается установленной не на активной строке исходного кода, то отладчик отреагирует на это следующим сообщением:

One or more breakpoints are not positioned on valid lines.


Начало  Назад  Вперед



Книжный магазин