【问题标题】:procdump not creating dumps for StackOverflow exceptionprocdump 没有为 StackOverflow 异常创建转储
【发布时间】:2013-09-27 11:09:01
【问题描述】:

我正在尝试为 .Net C# 应用程序创建故障转储。 为此,我编写了一个代码,该代码将使应用程序因 Stack Overflow 异常而崩溃:

namespace Crashme
{
    class Program
    {


        static void Main(string[] args)
        {
            for (int i = 0; i < 10; i++)
            {
                System.Threading.Thread.Sleep(2000);
            }

            Console.WriteLine("Calling text");

            crash obj = new crash();
            obj.sMyText = "abc";

        }
    }

    class crash
    {
        public string sMyText
        {
            get { return sMyText; }
            set { sMyText = value; }
        } 
    }
}

我正在使用的 procdump 命令:

.\procdump.exe -ma -e crashme.exe crash_dump1.dmp

应用程序按预期崩溃,procdump 也正在捕获它。我可以在 procdump 监控控制台打印中看到。 但是没有创建转储。

我猜我没有使用正确的 procdump 命令。有人可以帮忙吗?

【问题讨论】:

    标签: c# .net sysinternals procdump


    【解决方案1】:

    我最近在生产中遇到了堆栈溢出错误。这篇博文有办法捕捉到它。

    https://www.thebestcsharpprogrammerintheworld.com/2017/12/12/capture-a-stackoverflowexception-and-make-a-dump-0xc00000fd/

    基本上你使用这些选项

    procdump -accepteula -e 1 -f C00000FD.STACK_OVERFLOW -g -ma <PID> <OUTPUT PATH>
    

    【讨论】:

    • 博客链接已失效,但选项确实有效。谢谢!
    • 对于 .NET Core 3.1 应用程序,这对我不起作用,即使它因堆栈溢出而崩溃。因此,我使用了一个更全面的解决方案,使用以下命令,这很有效:mkdir C:\MemoryDumpsprocdump -accepteula -ma -i C:\MemoryDumps。完成后,运行此命令以停止捕获内存转储:procdump -u。我还将这些信息放在 Gist 中:gist.github.com/randyburden/a61f9ef867ed867c3e6e270b6b702388
    【解决方案2】:

    我认为您使用的是正确的命令。我重复了你的问题。它只是行不通。您可以尝试在 sysinternals 论坛上发帖。

    http://forum.sysinternals.com/

    我还有一个关于 procdump 的未解决问题:

    launching procdump from a 64-bit service doesn't work when running as Local Service or Local System

    我们公司改用 adplus。我们很高兴,很高兴能够针对不同类型的异常配置不同的操作。

    看起来即使使用 adplus 也有点棘手。

    Help catching StackOverflowException with WinDbg and ADPlus

    【讨论】:

    • 我发现使用 procdump -ma -e -t crashme.exe crash_dump1.dmp 正在为我创建转储文件。但是当我尝试使用 Visual Studio 2010 进行调试时,我找不到任何进一步的信息,因为它总是返回程序集而不是指出错误的行号和模块。你能帮我解决这个问题吗?
    • 我认为使用 -t 可能为时已晚,无法获得有用的转储文件。 -t 进程终止时写入转储。当stackoverflow异常发生时,你想得到一个转储文件。
    • 就像我说的,您可能需要在 sysinternals 论坛上发帖或开始学习 adplus(并使用我的答案中的链接来处理 StackOverflowException )。
    【解决方案3】:

    你需要先安装procdump并指定一个dump目录。

    procdump.exe -i C:\Path\To\Dumps
    

    【讨论】:

    • 安装模式下的procdump用于事后调试。在这种情况下应该不需要它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 2012-06-21
    相关资源
    最近更新 更多