【问题标题】:How to manually crash c# code如何手动崩溃c#代码
【发布时间】:2016-11-10 12:21:55
【问题描述】:

我在生产服务器上遇到很多 exe 崩溃问题,但是我想在 exe 崩溃时转储文件并显示详细日志。

我找到了 procdump 工具。你能推荐代码c#来手动崩溃exe,这样可以检查转储日志中的信息类型。

【问题讨论】:

  • throw new Exception();
  • 引发异常?加载其他平台程序集 (x86/x64)
  • 您在寻找什么样的崩溃?
  • 我遇到内存不足异常和 exe 在服务器上崩溃,所以期待转储所有信息,加载了多少对象及其状态。

标签: c#


【解决方案1】:

崩溃是由未捕获的异常引起的。只需在您的代码中添加一个

throw new Exception();

并且不要在任何地方添加 try-catch 块。

【讨论】:

    【解决方案2】:

    无法捕获的最好方法是创建堆栈溢出异常。这个会通过尝试/捕获...

    void MyMethod()
    {
        MyMethod();
    }
    

    【讨论】:

    • 当内置 Release 配置(启用优化)时,这应该不会崩溃(由于tail-call optimizations)。
    • 你能证实这一点吗?
    • 以这种方式构建时,运行时将选择通过不在调用堆栈上为每次递归创建新“框架”来优化事物,因此这将类似于 here: goto here; 或 @987654324 @ 两者都不会使应用程序崩溃。通过将代码粘贴到 Visual Studio 中很容易验证,请确保在解决方案配置下拉菜单中有“发布”,然后在不调试的情况下运行 (Ctrl+F5),例如。
    • 感谢您的信息。有了这些信息,我将为此测试使用调试版本。
    • 更正:事实上,按照我上面的说明,我无法证实我自己的说法。我很确定我早些时候成功地尝试过这个。也许它在某些(最近的)CLR 版本中被更改了,或者它可能取决于硬件或我不知道的一些附加设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多