Нарушение прав доступа во время простоя программы - не отслеживать информацию, чтобы отследить ошибку - PullRequest
0 голосов
/ 17 октября 2010

У меня есть программа, которая только что высветила AV. До сих пор журнал Eureka мог найти строку исходного кода, которая вызвала ошибку, но теперь он отображает только это:

Access violation at address 7E452E4E in module 'USER32.dll'. Read of address 00000015.

Call Stack Information:
--------------------------------------------------------------------------------------------
|Address |Module          |Unit         |Class|Procedure/Method                     |Line  |
--------------------------------------------------------------------------------------------
|Running Thread: ID=2640; Priority=0; Class=; [Main]                                       |
|------------------------------------------------------------------------------------------|
|77F16A7E|GDI32.dll       |             |     |IntersectClipRect                    |      |
|7E433000|USER32.dll      |             |     |EditWndProc                          |      |
|7E42A993|USER32.dll      |             |     |CallWindowProcA                      |      |
|7E42A97D|USER32.dll      |             |     |CallWindowProcA                      |      |
|7E429011|USER32.dll      |             |     |OffsetRect                           |      |
|7E4196C2|USER32.dll      |             |     |DispatchMessageA                     |      |
|7E4196B8|USER32.dll      |             |     |DispatchMessageA                     |      |
|00625E13|Amper.exe       |Amper.DPR    |     |                                     |76[16]|
|7C915511|ntdll.dll       |             |     |RtlFindActivationContextSectionString|      |
|7C915D61|ntdll.dll       |             |     |RtlFindCharInUnicodeString           |      |
|7C910466|ntdll.dll       |             |     |RtlFreeUnicodeString                 |      |
|7C80B87C|kernel32.dll    |             |     |IsDBCSLeadByte                       |      |
|7C9113ED|ntdll.dll       |             |     |RtlDeleteCriticalSection             |      |
|7C80EEF5|kernel32.dll    |             |     |FindClose                            |      |
|7C901000|ntdll.dll       |             |     |RtlEnterCriticalSection              |      |
|7C912CFF|ntdll.dll       |             |     |LdrLockLoaderLock                    |      |
|7C9010E0|ntdll.dll       |             |     |RtlLeaveCriticalSection              |      |
|7C912D19|ntdll.dll       |             |     |LdrUnlockLoaderLock                  |      |
|7C9166C1|ntdll.dll       |             |     |LdrGetDllHandleEx                    |      |
|7C9166B3|ntdll.dll       |             |     |LdrGetDllHandle                      |      |
|7C9166A0|ntdll.dll       |             |     |LdrGetDllHandle                      |      |
|7C912A8D|ntdll.dll       |             |     |RtlUnicodeToMultiByteN               |      |
|7C912C21|ntdll.dll       |             |     |RtlUnicodeStringToAnsiString         |      |
|7C901000|ntdll.dll       |             |     |RtlEnterCriticalSection              |      |
|7C912CC9|ntdll.dll       |             |     |LdrLockLoaderLock                    |      |
|7C912CFF|ntdll.dll       |             |     |LdrLockLoaderLock                    |      |
|7C9010E0|ntdll.dll       |             |     |RtlLeaveCriticalSection              |      |
|7C912D19|ntdll.dll       |             |     |LdrUnlockLoaderLock                  |      |
|7C90CF78|ntdll.dll       |             |     |ZwAllocateVirtualMemory              |      |
|7C90CF6E|ntdll.dll       |             |     |ZwAllocateVirtualMemory              |      |
|7C9010E0|ntdll.dll       |             |     |RtlLeaveCriticalSection              |      |
|7C80BA57|kernel32.dll    |             |     |VirtualQueryEx                       |      |
|7C80BA40|kernel32.dll    |             |     |VirtualQueryEx                       |      |
|7C80BA81|kernel32.dll    |             |     |VirtualQuery                         |      |
|7C901000|ntdll.dll       |             |     |RtlEnterCriticalSection              |      |
|7C912CC9|ntdll.dll       |             |     |LdrLockLoaderLock                    |      |
|7C912CFF|ntdll.dll       |             |     |LdrLockLoaderLock                    |      |
|7C9010E0|ntdll.dll       |             |     |RtlLeaveCriticalSection              |      |
--------------------------------------------------------------------------------------------

Программа была полностью бездействующей, пока я получал ошибку, и ее окно было скрыто другими окнами. FastMM активен и настроен на полную отладку, но это указывает на отсутствие перезаписи памяти. Любые советы о том, как найти происхождение этого AV?


Win XP, Delphi 7

Ответы [ 3 ]

2 голосов
/ 18 октября 2010

Я не вижу метода EditWndProc () в user32.dll, но у Delphi есть пара - одна, связанная с комбинированными сообщениями, и другая, связанная с представлениями дерева.Учитывая беспорядок в MS Comctrl, я думаю, у вас есть древовидное представление?

Проверьте свои древовидные представления.Учитывая параметры IntersectClipRect, легко догадаться, что ему передан недопустимый контекст устройства - так что ... вы делаете какую-либо пользовательскую рисование для своего дерева?Если это так, вы проверяете, чтобы убедиться, что дескриптор холста!NIL до того, как вы начнете рисовать (попробуйте утверждения, если ничего больше)?

1 голос
/ 18 октября 2010

Мне просто интересно, что находится на строке 76 [16] в Amper.exe ... Этот номер строки может быть подсказкой о местонахождении ошибки.
Опять же, когда это происходит просто во время бездействия, это происходит в основном, когда система обрабатывает сообщения Windows, такие как движение мыши, события клавиатуры, обновления таймера и многое другое.
Иногда помогает найти сообщение об ошибке и код. Я сделал быстрое сканирование и нашел этот КБ от MS , который предполагает, что такого рода ошибки могут возникать, когда вы вызываете определенные Windows API с недопустимыми параметрами. Но этот KB не относится к вашей ошибке. Тем не менее, это дает вам представление о том, что проверять: любой вызов Windows API, который вы делаете в своем собственном коде.
Это также генерирует это исключение в IDE, пока вы отлаживаете?

0 голосов
/ 17 октября 2010

Это то, что делает EurekaLog, когда ему не с чем работать.Вам необходимо восстановить и заставить компоновщик создать подробный файл карты.Вот как он знает, к чему применять свою трассировку стека.

...