Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ DebugDiagv2显示导致最大泄漏的未知_模块_C++_Pinvoke_Sos_Debugdiag_Sosex - Fatal编程技术网

C++ DebugDiagv2显示导致最大泄漏的未知_模块

C++ DebugDiagv2显示导致最大泄漏的未知_模块,c++,pinvoke,sos,debugdiag,sosex,C++,Pinvoke,Sos,Debugdiag,Sosex,最消耗内存的函数是DomainBoundILStubClass.IL_STUB_PInvoke(UInt32)。该模块的基址是0x00000000,所以这可能就是为什么它是“未知模块”模块的原因。以下是功能详细信息: 功能详细信息 Function DomainBoundILStubClass.IL_STUB_PInvoke(UInt32) Source Line Allocation type C/C++ runtime allocation(s) Allocation C

最消耗内存的函数是DomainBoundILStubClass.IL_STUB_PInvoke(UInt32)。该模块的基址是0x00000000,所以这可能就是为什么它是“未知模块”模块的原因。以下是功能详细信息:

功能详细信息

Function   DomainBoundILStubClass.IL_STUB_PInvoke(UInt32)  
Source Line  
Allocation type   C/C++ runtime allocation(s)  
Allocation Count   525709 allocation(s)  
Allocation Size   51.63 MBytes  
Leak Probability   35%
在堆栈跟踪的顶部或接近顶部有零个堆栈,所以我不知道调用它的是什么


我假设这是所有pinvoke打给malloc的电话的总和。对吗?既然“分配类型”是C/C++,那还会包括pinvoke对operator new的调用吗?

你不能在该函数上设置一个断点来知道调用它的是什么吗?是64位还是32位(如果我们想从堆栈或寄存器获取信息,这一点很重要)?您是否正在进行大量的网络请求(在某处缺少使用语句的
)?您使用的是哪个
[DllImport]
s?是.NET2还是.NET4(因为他们对PInvoke的行为不同)?就目前而言,这个问题过于宽泛和不清楚,无法回答。我不能在调试器下运行它,因为这会降低性能,而且这是一个实时生产服务。为什么是网络请求?这些是由托管C++编译器生成的PNECKE调用,我敢肯定,调用操作符new和/或Malc。事实上,我用一个测试管理C++应用程序编码了新的和MALOC的调用,这正是调用它们所生成的函数。尽管它被标记为C++,但不知怎的,你的代码是C**。对不起。我对管理C++几乎不熟悉,但是如果它调用新的或MALLC,那么UDDH不是选择的工具吗?我从UMDH开始,它显示了泄漏,但是它们的总和远小于整个私有字节增长。这提醒了我UMDH只能与默认的Windows堆管理器一起工作(“高级Windows调试”,第469页)。那本书提到了另一个工具LeakDiag,它支持六个分配器。我本来打算使用LeakDiag,但我的大脑记得它是DebugDiag。也许我应该试试LeakDiag。你不能在那个函数上设置一个断点来知道调用它的是什么吗?是64位还是32位(如果我们想从堆栈或寄存器获取信息,这一点很重要)?您是否正在进行大量的网络请求(在某处缺少使用
语句的
)?您使用的是哪个
[DllImport]
s?是.NET2还是.NET4(因为他们对PInvoke的行为不同)?就目前而言,这个问题过于宽泛和不清楚,无法回答。我不能在调试器下运行它,因为这会降低性能,而且这是一个实时生产服务。为什么是网络请求?这些是由托管C++编译器生成的PNECKE调用,我敢肯定,调用操作符new和/或Malc。事实上,我用一个测试管理C++应用程序编码了新的和MALOC的调用,这正是调用它们所生成的函数。尽管它被标记为C++,但不知怎的,你的代码是C**。对不起。我对管理C++几乎不熟悉,但是如果它调用新的或MALLC,那么UDDH不是选择的工具吗?我从UMDH开始,它显示了泄漏,但是它们的总和远小于整个私有字节增长。这提醒了我UMDH只能与默认的Windows堆管理器一起工作(“高级Windows调试”,第469页)。那本书提到了另一个工具LeakDiag,它支持六个分配器。我本来打算使用LeakDiag,但我的大脑记得它是DebugDiag。也许我应该试试LeakDiag。