Сбой программы VB6: Часть 2. Рекомендации по устранению нарушения прав доступа (0xC00000005) - PullRequest
0 голосов
/ 03 декабря 2008

Относится к этому вопросу . Любой совет по устранению проблемы ниже?

После долгих экспериментов с программой я обнаружил несколько вещей.

  1. Сбой относительно стабильно (90% времени или около того) при запуске строки кода, Set Message = New CAPICOM.EncryptedData. Обратите внимание, что строка над этим просто Dim Message As CAPICOM.EncryptedData.

  2. Функция, которая делает этот вызов, не падает, когда вызывается ранее при выполнении программы. Двоичный поиск ошибок не помогает найти проблему, поскольку вызов функции в некоторых местах таинственным образом ненадежно предотвращает возникновение ошибки. Иногда кажется, что перестройка программы влияет, если обнаруживается ошибка. Да, это гейзенбаг. Те же проблемы применимы и к временному двоичному поиску ошибок. Проведите 5 часов, сравнивая две версии программы, только чтобы обнаружить, что в обеих версиях есть ошибка, хотя только одна из них в настоящее время показывает, что симптомы не очень продуктивны.

  3. Сбой из-за нарушения прав доступа 0xC00000005

  4. Запуск WinDbg (отладчик Windows) показывает, что есть только одна строка кода, которая читает эту область памяти, LoadPicture(szTmpBMP). Он вызывается в конце страшной функции, которая извлекает изображение из ресурса и помещает его во временный файл. Я был достаточно напуган этой функцией, чтобы ради тестирования я заменил ее вызовом LoadPicture("testcra.bmp"), а затем не вызвал функцию страшного ресурса для этого растрового изображения. Это не помогло. Удаление этого вызова для loadpicture полностью также не помогло, хотя отладчик больше не мог находить какие-либо точки, где читалась затронутая память, и затронутая память больше не находилась в том же месте. Это тестирование проводилось на виртуальной машине, поэтому некоторые операции чтения памяти не обязательно будут видны отладчику.

  5. Все отлично работает на Vista (как на моей локальной машине, так и на Vista Vista). Нарушение доступа происходит только на XP.

  6. Я использую VB6 версии 8176, 6.0.8169

1 Ответ

0 голосов
/ 04 декабря 2008

Мое текущее решение, которое работает, состоит в том, чтобы создавать все мои объекты capicom на ранней стадии, и никогда не создавать новые экземпляры capicom.encrypteddata, кроме первого. Это работает, но маловероятно, что основная проблема была на самом деле исправлена.

...