使用Windbg(或mscordmp)为托管(.NET)应用程序创建转储文件

6

我正在研究为托管进程创建转储文件。

我知道可以使用windbg来创建转储文件,但我想知道是否有任何特殊的标志应该传递给“.dump”命令,因为它是托管应用程序而不是本地应用程序。

一个相关的附加问题:我听说过一个叫做mscordmp.exe的工具(如果你在谷歌上搜索,你可以在网上找到它的提及)。mscordmp仍然相关吗?我无法在任何地方找到它的下载点,但我认为它可能比windbg更适合转储托管内存。


可能是如何为.NET获取良好的崩溃转储?的重复问题。 - Thomas Weller
2个回答

4
你应该使用/ma来创建完整的内存转储。否则,sos会抱怨受限制的托管分析。

0

不,没有任何与托管应用程序相关的特殊标志,windbg只创建内存转储,它是原始数据。你的分析工具的目的是知道你的转储是为托管应用程序还是非托管应用程序创建的。

如果谈到分析托管应用程序,可以采取以下步骤:

  1. windbg 附加到运行托管应用程序的进程上
  2. 运行 .dump /ma <outputfilename.dmp>。它会创建转储文件,这个操作可能需要几分钟,具体取决于进程消耗的内存。 /ma 标志命令创建带有所有选项启用的附加进程的完整内存转储(它不是完整的系统转储,只是附加的进程)。
  3. 从进程中分离出来,它可以继续运行,而您可以将转储文件加载到 windbg 中进行分析。
  4. sos.dll 是用于分析托管应用程序的常见 windbg 扩展。

附注:使用 .load sos.dll 启用 sos.dll 可能会出现问题,在这种情况下,您可以尝试使用 .loadby sos mscorwks


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接