У меня возникла проблема, когда мое приложение не выполняет утверждение об отладке (_CrtIsValidHeapPointer) до того, как что-либо даже выполнено. Я знаю это, потому что я добавил точку останова в первом выражении моей основной функции, и она не выполняет утверждение до достижения точки останова.Visual Studio: отладка перед вызовом функции main()
Есть ли способ каким-то образом «пройти» все, что происходит до того, как моя главная функция называется? Такие вещи, как инициализация статических элементов и т. Д.
Следует отметить, что моя программа написана на C++/CLI. Недавно я обновился до VS2015 и нацелился на набор инструментов v140. Библиотеки C++, которые я использую (ImageMagick, libsquish и одна из моих собственных библиотек C++), были протестированы индивидуально, и я не получаю ошибку утверждения с этими библиотеками, поэтому это должно быть мое основное приложение.
Я не изменил код, так как я обновился от VS2013, так что я немного озадачен тем, что происходит.
EDIT: Здесь находится стек вызовов. Это после того, как я нажму «Повторить» в окне с ошибкой утверждения. Затем я получаю множество других исключений, но они разные при каждом запуске программы.
> ucrtbased.dll!527a6853()
[Frames below may be incorrect and/or missing, no symbols loaded for ucrtbased.dll]
ucrtbased.dll!527a7130()
ucrtbased.dll!527a69cb()
ucrtbased.dll!527c8116()
ucrtbased.dll!527c7eb3()
ucrtbased.dll!527c7fb3()
ucrtbased.dll!527c84b0()
PathCreator.exe!_onexit(int (void)* const function) Line 268 + 0xe bytes C++
PathCreator.exe!atexit(void (void)* const function) Line 276 + 0x9 bytes C++
PathCreator.exe!std::`dynamic initializer for '_Fac_tidy_reg''() Line 65 + 0xd bytes C++
[External Code]
mscoreei.dll!7401cd87()
mscoree.dll!741fdd05()
kernel32.dll!76c33744()
ntdll.dll!7720a064()
ntdll.dll!7720a02f()
Вы можете попробовать другой отладчик, обычно [tag: WinDbg]. Это непросто, но попробуйте. Запустите исполняемый файл из WinDbg, на первой точке останова [установите символы] (http://stackoverflow.com/questions/30019889/how-to-set-up-symbols-in-windbg) и запустите приложение ('g '). Когда вызывается исключение, покажите его ('.exr -1') и callstack (' k'). '! analysis -v' может также дать некоторые результаты. Если вы рассматриваете WinDbg как опцию, я могу написать более подробный ответ, но пока это помечено как Visual Studio. –