程序空闲时访问冲突 - 不跟踪信息以追踪错误

时间:2010-10-17 14:16:34

标签: delphi exception-handling windows-xp delphi-7

我有一个刚刚弹出AV的程序。到目前为止,Eureka Log可以找到生成错误的源代码行,但现在只显示:

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 个答案:

答案 0 :(得分:2)

我没有在user32.dll中看到EditWndProc()方法,但是Delphi有一对 - 一个处理组合框消息,一个处理树视图。鉴于MS的命令混乱,我猜你有树视图吗?

检查您的树视图内容。给定IntersectClipRect的参数,很容易猜到它正在传递一个无效的设备上下文 - 所以......你在为树视图做任何自定义绘画吗?如果是这样,你是否检查以确保画布手柄是!在开始绘画之前是NIL(如果没有其他的话,请尝试断言)?

答案 1 :(得分:1)

我只是想知道Amper.exe中第76行[16]的内容......该行号可能是错误位置的提示。
然后,当它刚刚在空闲时刻发生时,它基本上发生在系统处理Windows消息时,如鼠标移动,键盘事件,定时器更新等等。
它有时有助于search for错误消息和代码。我已经快速扫描并发现this KB from MS,这表明当您使用无效参数调用某些Windows API时会发生此类错误。但是这个KB不适用于您的错误。它仍然可以让您了解要检查的内容:您在自己的代码中进行的任何Windows API调用 在您正在调试时,它是否也在IDE中生成此异常?

答案 2 :(得分:0)

这就是EurekaLog在没有任何关系时所做的事情。您需要重建并让链接器生成详细的映​​射文件。这就是它如何知道将其堆栈跟踪应用到的原因。

相关问题