2

我正在尝试为 .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 命令。有人可以帮忙吗?

4

3 回答 3

8

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

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>
于 2018-05-09T00:41:17.773 回答
1

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

http://forum.sysinternals.com/

我对 procdump 也有一个未解决的问题:

作为本地服务或本地系统运行时,从 64 位服务启动 procdump 不起作用

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

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

使用 WinDbg 和 ADPlus 帮助捕获 StackOverflowException

于 2013-09-27T11:34:10.007 回答
-4

您需要先安装 procdump 并指定转储目录。

procdump.exe -i C:\Path\To\Dumps
于 2021-04-23T16:40:11.753 回答