【问题标题】:Throw exception where the class was instantiated - C#在类被实例化的地方抛出异常 - C#
【发布时间】:2013-04-29 00:42:51
【问题描述】:

我正在开发一个供程序员使用的库。 当我抛出异常时,调试器会转到抛出异常的位置,而不是实例化类或执行方法的位置。

使用 try .. catch 可以解决这个问题,但是如果使用该库的程序员没有打开 try .. catch 怎么办?他会看到我所有的代码! 我怎样才能避免这种情况?

【问题讨论】:

标签: c# class exception methods throw


【解决方案1】:

好吧,如果您制作了库的发布版本并且您不提供调试器符号 (pdb),则库用户的调试器不应显示您的代码。 OTOH,你知道反射器之类的工具吗?您的代码并不是真正的秘密。

【讨论】:

    【解决方案2】:

    他会看到我所有的代码!

    是的,如果您分发代码。如果不这样做,您希望如何看到代码?不要忘记,与大多数使用您的库的开发人员所处的情况不同,因为您的机器上有源代码。在没有源代码的机器上尝试相同的 DLL。

    开发人员可能会看到您的代码的反编译版本,这可能是个大问题吗?如果是这样,您应该考虑混淆您的代码 - 但请注意,这也会带来一些后勤方面的缺点。

    我怀疑这真的不是问题。

    【讨论】:

      【解决方案3】:

      如果我了解您要查找的内容,我认为您想在代码中使用 try catch,而不是处理异常的 catch 块,您想像这样重新抛出它:

      try
          {
              //exception code
          }
          catch (Exception e)
          {
               throw e;
          }
      

      如果我没记错的话,像这样抛出会重置堆栈跟踪,而仅仅抛出会保持堆栈跟踪完好无损。

      【讨论】:

        猜你喜欢
        • 2013-02-17
        • 2012-09-12
        • 1970-01-01
        • 1970-01-01
        • 2019-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多