Попробуйте подключить отладчик к процессу и отлаживать отладчик при нарушениях доступа.
Если это невозможно, мы используем инструмент, называемый «самозагрузчик процесса пользователя», чтобы создать дамп памяти процесса в точке, где произошло нарушение прав доступа. Вы можете найти это скачать здесь:
http://www.microsoft.com/downloads/details.aspx?FamilyID=E089CA41-6A87-40C8-BF69-28AC08570B7E&displaylang=en
Как это работает: Вы настраиваете правила о процессе каждого (или, возможно, общесистемной) основы, и есть инструмент создания либо минидампа или полный дамп в тот момент, когда он обнаруживает какой-либо из списков исключений - один из них является нарушением прав доступа. После того, как дамп был сделан, приложение продолжается как обычно (и, если нарушение доступа будет необработанным, вы увидите это диалоговое окно).
Обратите внимание, что все нарушения доступа в вашем процессе захватываются - даже те, которые затем обрабатываются, также полный дамп может создавать время для создания в зависимости от объема памяти, используемой приложением (10-20 секунд для процесс потребления 100-200 МБ частной памяти). По этой причине, вероятно, не рекомендуется включать ее в общесистемную.
Вы должны затем проанализировать дамп с помощью таких инструментов, как WinDbg (http://www.microsoft.com/whdc/devtools/debugging/default.mspx), чтобы выяснить, что произошло - в большинстве случаев вы обнаружите, что вам нужен только мини-накопитель, а не полный дамп (однако, если ваше приложение не использует много памяти, тогда существует множество недостатков наличия полного дампа, отличного от размера дампа, и времени, необходимого для создания дампа).
И, наконец, следует предупредить, что отладочные нарушения доступа с использованием WinDbg могут быть довольно сложным и сложным процессом - если вы можете получить трассировку стека другим способом, тогда вы можете попробовать это первым.
Почему именно вы не можете отлаживать? – sharptooth
Он просто сбой в какой-то случайной точке. Он входит в DLL MFC и падает там, и стек вызовов не говорит, какая точка в моем коде взяла контроль там. –
Если у вас есть отладчик, вы должны четко видеть, какая строка кода вы вызываете в MFC. Если это не включено, или вы имеете файлы .pdb, не синхронные с исполняемым файлом. – sharptooth