我刚刚开始查看转储文件,以帮助我分析工作中生产环境中w3wp进程的崩溃...
我想知道,minidump和fulldump文件之间有什么区别?
我的一些应用程序出了问题.它是在Windows 2003 Server(x86)中的IIS6下运行的基于wcf的应用程序:
在事件日志中,我从"W3SVC-WP"源(EventID = 2262)得到这样的错误:
ISAPI 'C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll' reported itself as unhealthy for the following reason: 'Deadlock detected'.
Run Code Online (Sandbox Code Playgroud)
我正在尝试弄清楚发生了什么.我已按照此KB中的描述为Orphan Worker Process设置了转储.发生死锁时会创建一个小型转储.
然后我拿这个小型泵试图了解发生了什么.这是我被困住了.
我运行WinDbg x86,打开我的转储然后:
0:037> .loadby sos clr
0:037> .sympath SRV*c:\temp\symbols*http://msdl.microsoft.com/download/symbols
Symbol search path is: SRV*c:\temp\symbols*http://msdl.microsoft.com/download/symbols
Expanded Symbol search path is: srv*c:\temp\symbols*http://msdl.microsoft.com/download/symbols
0:037> !clrstack
The version of SOS does not match the version of CLR you are debugging. Please load the matching version of SOS for the version of CLR you are debugging.
CLR Version: 4.0.30319.1
SOS Version: …Run Code Online (Sandbox Code Playgroud) 我无法通过更改系统设置来创建我的流程的minidump.所以我的问题是:
当系统崩溃时,系统是否会为用户进程创建一个minidump
如果是,我需要配置哪个设置
或者我必须以编程方式创建minidump.
在调查崩溃时小型泵的效果如何
我使用的是Windows XP,C++,VC6
我正在尝试使用Visual Studio 2015企业版"调试托管内存".该文件为1.2GB,加载后我得到错误信息"由于内存不足导致内存分析无法完成"按下"调试管理内存"后
我还能做些什么才能用pdb文件查看内存?我可以使用更多内存启动Visual Studio 2015(计算机有25 GB内存可用)我想这与使用x86运行的Visual Studio有关.
多年来我在很多游戏项目中都使用过minidumps,他们似乎有大约50%的机会拥有一个有效的调用堆栈.我该怎么做才能让他们有更好的调用堆栈?
我已经尝试将最新的dbghelp.dll放在exe目录中.这似乎有些帮助.
Visual Studio 2008或2010是否更好?(我还在VS 2005).
我使用的代码看起来像这个样本.
通过.NET 4.0中的转储调试支持,我们自动调查(当然询问用户:)创建C#程序崩溃的小型转储以将它们上传到我们的问题跟踪系统(以便minidumps可以帮助解决原因崩溃).
使用WithFullMemory minidump类型时,一切正常.我们可以看到堆栈和堆变量.不幸的是,即使对于小型C#程序,(zipped)转储也非常大.
如果我们使用"Normal"minidump类型,我们会得到一个非常小的转储,但托管调试器中甚至没有堆栈变量信息.事实上,任何比WithFullMemory更少的东西在托管调试器中似乎都没用.我们已经尝试过使用MINIDUMP_CALLBACK_ROUTINE将包含的模块信息限制到我们自己的模块,但它似乎对托管转储几乎没有影响,但仍设法破坏托管调试?
有没有人有关于如何修剪minidump同时保持其对托管调试有用的任何提示?
我目前使用未处理的异常捕获MiniDumps,__CODE__但有时我得到"R6025:纯虚函数".
我理解一个纯虚函数调用是如何发生的我只是想知道是否有可能捕获它们所以我可以在那时创建一个MiniDump.
我有一个Windows minidump(C代码)和一个相应的exe文件.不幸的是,我没有完全匹配的.pdb文件,但我确实有.pdbs包含完全相同的代码,只是在不同的时间构建.在Windbg中,我可以使用:
.symopt+0x40
Run Code Online (Sandbox Code Playgroud)
告诉它加载任何东西,甚至是不匹配的符号文件.这在这个特定的实例中效果很好,我能够得到一个正确的调用堆栈.我只是好奇Visual Studio是否有这样的功能.我们在这里使用了几乎所有不同版本的VS,因此它可能属于哪个版本并不重要.谢谢.
我试图为我的应用程序创建一个转储文件崩溃.我目前正在使用带有-e标志的procdump.exe来执行此操作,因此如果我的应用程序中有未处理的异常,procdump会为我创建一个转储文件.
我以为我已经完成了,但后来我发现我的应用程序崩溃并且procdump没有创建转储文件.经过一些调查后,我发现无效使用vector :: front会导致运行时错误.我打开了_SECURE_SCL_THROWS标志,之后procdump.exe -e确实捕获了崩溃并创建了一个转储文件.
现在问我的问题:现在procdump.exe -e会在我的应用程序崩溃时始终创建转储文件吗?我如何保证我没有任何其他procdump -e对我不利的场景?
我捕获了在64位Windows操作系统上运行的32位.NET应用程序的故障转储.在分析过程中,有人发现我有一个64位转储并告诉我由于错误的位数而无法分析这个转储.
使用Windows任务管理器创建转储时,我不知道我做错了什么.这始终适用于32位操作系统.
我怎样才能为.NET提供良好的转储,尤其是正确的位数?