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


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

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

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

Решение

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

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

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

См. также

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

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

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

Setting Breakpoints

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