我正在开发一个供程序员使用的库。当我抛出异常时,调试器会转到抛出异常的位置,而不是实例化类或执行方法的位置。
使用 try .. catch 可以解决这个问题,但是如果使用该库的程序员没有打开 try .. catch 怎么办?他会看到我所有的代码!我怎样才能避免这种情况?
他会看到我所有的代码!
是的,如果你分发你的代码。如果不这样做,您希望如何看到代码?不要忘记,与大多数使用您的库的开发人员所处的情况不同,因为您的机器上有源代码。在没有源代码的机器上尝试相同的 DLL 。
开发人员可能会看到您的代码的反编译版本,也许 - 这是一个很大的问题吗?如果是这样,您应该考虑混淆您的代码 - 但请注意,这也会带来一些后勤方面的缺点。
我怀疑这真的不是问题。
好吧,如果您制作了库的发布版本并且您不提供调试器符号 (pdb),则库用户的调试器不应显示您的代码。OTOH,你知道反射器之类的工具吗?您的代码并不是真正的秘密。
如果我了解您要查找的内容,我认为您想在代码中使用 try catch 而不是处理异常的 catch 块,您想像这样重新抛出它:
try
{
//exception code
}
catch (Exception e)
{
throw e;
}
如果我没记错的话,像这样抛出会重置堆栈跟踪,而只是抛出会保持堆栈跟踪完好无损。