windows – 调查内存泄漏
发布时间:2020-12-14 04:03:09 所属栏目:Windows 来源:网络整理
导读:我们的应用程序中存在缓慢的内存泄漏,并且我已经尝试分析泄漏原因以下步骤: 在GFlags中启用用户模式堆栈跟踪数据库 在Windbg中,键入以下命令:!heap -stat -h 1250000(其中1250000是具有泄漏的堆的地址) 在比较多个转储之后,我看到大小为0xC的内存块随着时
我们的应用程序中存在缓慢的内存泄漏,并且我已经尝试分析泄漏原因以下步骤:
>在GFlags中启用用户模式堆栈跟踪数据库 0:000> !heap -p -a 10576ef8 address 10576ef8 found in _HEAP @ 1250000 HEAP_ENTRY Size Prev Flags UserPtr UserSize - state 10576ed0 000a 0000 [03] 10576ef8 0000c - (busy) mscoreei!CLRRuntimeInfoImpl::`vftable' 7c94b244 ntdll!RtlAllocateHeapSlowly+0x00000044 7c919c0c ntdll!RtlAllocateHeap+0x00000e64 603b14a4 mscoreei!UtilExecutionEngine::ClrHeapAlloc+0x00000014 603b14cb mscoreei!ClrHeapAlloc+0x00000023 603b14f7 mscoreei!ClrAllocInProcessHeapBootstrap+0x0000002e 603b1614 mscoreei!operator new[]+0x0000002b 603d402b +0x0000005f 603d5142 mscoreei!GetThunkUseState+0x00000025 603d6fe8 mscoreei!_CorDllMain+0x00000056 79015012 mscoree!ShellShim__CorDllMain+0x000000ad 7c90118a ntdll!LdrpCallInitRoutine+0x00000014 7c919a6d ntdll!LdrpInitializeThread+0x000000c0 7c9198e6 ntdll!_LdrpInitialize+0x00000219 7c90e457 ntdll!KiUserApcDispatcher+0x00000007 这看起来像线程初始化调用堆栈,但我需要知道更多. 解决方法
使用GFlags时记录的堆栈是在不使用.pdb的情况下完成的,通常不正确.
由于您已将泄漏跟踪到给定堆上的特定大小,因此您可以尝试 在RtlAllocateHeap中设置实时中断并使用适当的符号检查windbg中的堆栈.我使用了以下内容并取得了一些成功.您必须编辑它以适合您的堆和大小. $$Display stack if heap handle eq 0x00310000 and size is 0x1303 $$==================================================================== bp ntdll!RtlAllocateHeap "j ((poi(@esp+4) = 0x00310000) & (poi(@esp+c) = 0x1303) )'k';'gc'" 也许你会为罪犯获得另一个筹码和其他想法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- Windows-8 – 可以在Windows 10/Windows 8/WinRT
- windows-phone-7 – 如何在Windows Phone 7模拟器
- windows-server-2003 – PerfMon计数器不可用
- .net – 在Windows Azure上部署MPI应用程序
- windows-8 – 如何在Windows 8上为WebDAV启用基本
- Windows 上编译 corefx 源码生成 Linux 上可用的
- windows – 在没有lodctr的情况下注册性能计数器
- windows – WipeDrive实用程序?
- windows配置kafka环境 (依赖zookeeper,kafka内置
- 如何在Windows上切换到另一个应用程序(使用C,Qt)
热点阅读