我有一个刚刚弹出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
答案 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在没有任何关系时所做的事情。您需要重建并让链接器生成详细的映射文件。这就是它如何知道将其堆栈跟踪应用到的原因。