代码之家  ›  专栏  ›  技术社区  ›  James Cadd

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

  •  5
  • James Cadd  · 技术社区  · 16 年前

    我正在处理一个托管的EXE文件,它运行时会立即崩溃。通常我希望有一个对话框,允许一个选项来启动调试器,但在这种情况下没有这样的运气。另外,程序崩溃太快,我无法在visualstudio中使用attach-to-process。

    解决办法是什么?

    5 回复  |  直到 13 年前
        1
  •  15
  •   Peter Mortensen Pieter Jan Bonestroo    9 年前

    如果你有 WinDbg 已安装,使用菜单 文件 打开可执行文件 直接在调试器下打开应用程序并立即自动中断。

    调试 (即。, 去吧 SOS Extensions . 不像visualstudio那么好,但是如果您只有EXE(希望还有PDB,尽管这是可选的)而没有源代码,那么它会很有用。

    例子

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

    这会立即崩溃,您没有机会及时附加调试器。这是点击“Run”后的WinDbg输出:

    删除了死图片棚链接-手绘圆圈由我

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

        2
  •  3
  •   Oliver Salzburg    10 年前

    上面没有提到的另一个选择是插入

    Debugger.Break();
    

    在程序的最开始处的语句-可能包装在一个#ifdef调试中,以便在构建发布时更容易跳过。我用这种技术调试了早期崩溃的Windows服务。

        3
  •  2
  •   Clinton Pierce    16 年前

    我使用ildasm只是为了确保我有一个有效的(看起来)托管可执行文件。

        4
  •  2
  •   Nick    16 年前

    Application.Run(new MyForm());
    

    Assembly Binding Log Viewer 以确定是否缺少所需的程序集或存在版本控制问题。

        5
  •  1
  •   Peter Mortensen Pieter Jan Bonestroo    9 年前

    在调试器中启动它( Ctrl键 班次 B ). 您应该能够设置一个任意断点(如在main函数中)并单步执行。