调试立即崩溃的.NET EXE文件

Jam*_*add 5 .net debugging executable

我正在使用托管的EXE文件,该文件在运行时立即崩溃.通常我会期望一个允许选项启动调试器的对话框,但在这种情况下没有这样的运气.此外,程序崩溃太快,我无法在Visual Studio中使用附加进程.

解决办法是什么?

Mic*_*tum 14

如果安装了WinDbg,请使用菜单FileOpen Executable直接在调试器下打开应用程序并立即自动中断.

然后,您可以使用Debug(即Go)下的命令正常执行并调试它.还要加载SOS扩展.不如Visual Studio好,但如果你只有EXE(希望是PDB,虽然这是可选的)并且没有来源,那就很有用.

示例:这是我的源代码,我们假设它不可用:

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        int x = 10 - 10;
        int i = 2000/x;

        Application.Run(new Form1());
    }
Run Code Online (Sandbox Code Playgroud)

这会立即崩溃,您无法及时附加调试器.这是点击"运行"后的WinDbg输出:

删除了死亡的ImageShack链接 - 由我自由旋转

加载SOS.dll后,您可以使用!DumpStack查看抛出异常的位置:

删除了死亡的ImageShack链接 - 没有手绘圈,对不起!

请注意,JIT或编译器优化可能会导致内联方法,这可能使StackTrace不是100%可靠,但是为了快速概述它可以工作.

WinDbg有点神秘,但是一旦你完成了一些基础知识,它就会很棒,至少有助于找到问题的根源.