猿问

忽略在 C# .NET 中抛出的特定异常

是否可以让 .NET CLR 忽略某些异常?例如,抛出将被简单地跳过并且函数继续,好像什么也没发生?

是否可以在不修改抛出代码的位置的情况下执行此操作?该软件是 .NET 4.6.1 WinForms。

原因是由于逆向工程一些具有数千个校验和例程的恶意软件,我需要修改 MSIL 代码并因此更改校验和,通过 dnlib 脚本删除所有例程将是非常耗时的任务。如果我可以阻止特定的异常,我就可以避免这个耗时的任务。

编辑:我记得在某些 WinForms 应用程序中看到“发生异常,您想继续还是退出?” 当然,这就是我需要的,如果我能有效地拒绝异常并继续,就好像它从未发生过一样。

这是一个例子。我怎样才能启用它?

示例:请注意,我不是在编写代码。我正在用 dnspy 编辑一个已编译的 exe,所以我不能轻易更改代码,我必须手动编辑 MSIL 字节代码。


public void Test(){

  throw new ArgumentException("ignore this");


  MessageBox.Show("Successfully ignored exception");


}


慕后森
浏览 413回答 2
2回答

LEATH

您不能以您想要的方式“忽略”异常。但是,如果您正在遍历例程,则始终可以跳过引发异常的一次迭代……例如:while(condition){    try    {        // your iteration    }    catch (Exception)    {        /* don't do a catch, so it will jump back to your while statement and just         try the next one */    }}这应该会产生您想要的效果,因为它只会忽略会阻止程序运行的迭代。希望这可以帮助!

冉冉说

您显然可以在 Catch 中放置一个 if 检查以在特定异常上操作自定义功能 -            try            {                // function which you will operate            }            catch (Exception ex)            {                if (ex is StackOverflowException) //(Type your exception type here)                {                    //log this if you want                }                else                {                    throw; //or handle as per your requirement                }            }
随时随地看视频慕课网APP
我要回答