Re: 用umdh来找内存增长,打开user mode stack trace database程序就运行不起来,为什么?

C/C++本地代码调试

用umdh来找内存增长,打开user mode stack trace database程序就运行不起来,为什么?


chena_cpp 2013-04-17, 14:59 下午
程序退出的时候没有泄露,但是内存增长不正常,有隐式内存泄露。
想通过umdh来找,但是gflags /i myapp.exe _ust之后,程序就运行不起来了,停住不动了,也不crash。
这是为什么?

Re: 用umdh来找内存增长,打开user mode stack trace database程序就运行不起来,为什么?


格蠹老雷 2013-04-17, 22:23 下午
上调试器,看停在哪

Re: 用umdh来找内存增长,打开user mode stack trace database程序就运行不起来,为什么?


chena_cpp 2013-04-18, 17:16 下午
谢谢。

我上调试器看了,是因为太慢了,因为我程序一开始运行的时候初始化了很多东西,new了几万次。
但是这些部分我知道没有泄露的,能不能动态的开关stack trace?我想等初始化完了再开始记录。

把heap block的usage设置成_CRT_USE_IGNORE,是不是就不记录了?

Re: 用umdh来找内存增长,打开user mode stack trace database程序就运行不起来,为什么?


格蠹老雷 2013-04-20, 20:10 下午

通常是创建堆之前要启用,启用后不可以禁止。但可以以堆为单位来启用UST,一个进程内通常有很多个堆,如果你能确认有问题的堆,那么可以只对这个堆启用UST

Re: 用umdh来找内存增长,打开user mode stack trace database程序就运行不起来,为什么?


chena_cpp 2013-04-22, 13:21 下午
umdh能捕获到所有的内存分配吗?
我用umdh比较前后两次,发现只捕获到了9m的内存增长。
但是如果不开ust,这两次之间,内存增长了70m左右。

Re: 用umdh来找内存增长,打开user mode stack trace database程序就运行不起来,为什么?


格蠹老雷 2013-04-22, 20:54 下午

UST监视的只是Win32堆,此外的内存分配还可能是直接调用VirtualAlloc,或者使用CRT的SBH堆(小块)等...

Re: 用umdh来找内存增长,打开user mode stack trace database程序就运行不起来,为什么?


chena_cpp 2013-04-23, 09:03 上午
谢谢了。
有没有工具能监视到所有的内存分配了?因为用到了一些不是自己写的库,所有靠自己写代码是不行了。

Re: 用umdh来找内存增长,打开user mode stack trace database程序就运行不起来,为什么?


格蠹老雷 2013-04-27, 15:50 下午
建议要换一下思路,先定位一下大致的范围,然后再有针对性的找方案,最好不要尝试"全城戒严,全民搜索"...

Powered by Community Server Powered by CnForums.Net