Поделиться через


Как определить конкретный вызов функции, приведший к сбою, если таких вызовов было порядка ста?

Этот раздел применим к:

Выпуск

Visual Basic

C#

F#

C++

Web Developer

Express

Тема не применяется Тема не применяется Тема не применяется

Только машинные коды

Тема не применяется

Pro, Premium и Ultimate

Тема не применяется Тема не применяется Тема не применяется

Только машинные коды

Тема не применяется

Описание проблемы

Программа дает сбой при вызове некой функции CnvtV. Программа, вероятно, вызывает эту функцию перед сбоем пару сотен раз. Если поставить точку останова на CnvtV, программа останавливается на каждом вызове этой функции, а этого не требуется. Непонятно, что приводит к сбойному вызову, поэтому поставить условную точку останова невозможно. Что можно сделать?

Решение

Можно установить точку останова на функции с полем Число попаданий, равной недостижимо большому значению. В этом случае, так как предполагается, что функция CnvtV вызывается пару сотен раз, Число попаданий можно задать 1000 или более. Затем запустить программу и подождать сбоя. Когда сбой произойдет, откройте окно точек останова и просмотрите их список. Точка останова в CnvtV появилась, следом появилось заданное число попаданий и количество выполненных итераций:

CnvtV(int) (no condition) when hit count is equal to 1000 (currently 101)

Теперь понятно, что функция дала сбой на 101-м вызове. Если теперь задать точку останова с количеством попаданий 101 и запустить программу снова, она остановится именно на том вызове CnvtV, который и привел к сбою.

См. также

Основные понятия

Вопросы и ответы по отладке машинного кода

Точки останова и точки отслеживания

Другие ресурсы

Отладка машинного кода