У меня есть клиент, сообщающий о предполагаемой утечке ресурсов в нашем продукте, который использовал смешанный код. Поэтому я хотел отладить его, чтобы увидеть, что на самом деле происходит. Я испытывал такие странности, как сбой Visual Studio, зависание во время пошагового выполнения кода и отладчик, который останавливался в случайных точках с плохими кодами выхода.
Я сузил его до неуправляемой функции, которая его вызывает, это функция, запущенная из другого потока по сравнению с основным. Я продолжаю думать, что у меня есть точная строка кода, которая его вызывает, но локация проблемы, кажется, постоянно меняется. Таким образом, я добрался до общего положения проблемы и начал пошагово перебирать ассемблерный код.
Я даже переместил свою точку останова туда, где функция сначала начинается, и гремит, когда отладчик достигает этой точки, и если я пройду мимо нее, она выйдет. Если я вместо этого установлю в функции свою точку останова на 20 строк, выполнение ее достигнет этой точки, затем я перейду мимо нее, и отладчик завершит работу, поэтому я не верю, что она действительно имеет какое-либо отношение к тому, что в действительности делает моя функция в { }.
Когда я делаю это с F10, отладчик останавливается, и код выхода — STATUS_WX86_BREAKPOINT, когда я делаю это с F11, он останавливается с кодом выхода STATUS_WX86_SINGLE_STEP. Названия кодов ошибок имеют смысл для меня в зависимости от типа перехода, но на самом деле не говорят мне, что не так. Когда я запускаю его снова, я пытаюсь перейти к точке останова в разборке, думая, что увижу, что произошло раньше, выход просто происходит раньше, так что это довольно раздражает. Я никогда раньше не сталкивался с чем-то подобным и не могу понять, что на самом деле означает эта ошибка, что я делаю неправильно?
Иногда вместо выхода с плохим кодом Visual Studio просто зависает от меня.
Я склонен согласиться с комментарием @paddy, похоже, проблема в другом потоке.
Вы установили VS для остановки при первом исключении?
В вашем случае, поскольку это неуправляемый код, я бы настроил отладчик на остановку на исключениях win32 и C ++ (все они).
Если вы не знаете, вы можете сделать это из меню отладки -> Исключения …
Других решений пока нет …