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