Exception handling 究竟是哪一个物体引起的;对象引用未设置为对象的实例";?

Exception handling 究竟是哪一个物体引起的;对象引用未设置为对象的实例";?,exception-handling,c#-3.0,object-reference,Exception Handling,C# 3.0,Object Reference,我有在服务器上运行的DLL,由于许多原因我无法调试它,我记录了它的异常情况。 有时我在方法调用中有“Object reference not set to a instance of a Object”,该方法调用有大约20个参数,我花了很长时间才知道导致异常的对象在哪里 如果“对象引用未设置为对象的实例”以及导致异常的对象的名称,是否有任何方法来记录异常?如果要记录为null的确切参数(听起来好像调试是不可能的)您将需要单独测试每个参数是否为null,如果该参数为null,并将参数名称作为字符

我有在服务器上运行的DLL,由于许多原因我无法调试它,我记录了它的异常情况。
有时我在方法调用中有
“Object reference not set to a instance of a Object”
,该方法调用有大约20个参数,我花了很长时间才知道导致异常的对象在哪里

如果
“对象引用未设置为对象的实例”
以及导致异常的对象的名称,是否有任何方法来记录异常?

如果要记录为null的确切参数(听起来好像调试是不可能的)您将需要单独测试每个参数是否为null,如果该参数为null,并将参数名称作为字符串传递给

这是接受20个参数的方法可能导致棘手维护问题的一个原因(众多原因之一)。它表明一个方法可能有太多的责任,并且可能试图做得比它应该做的更多。当您在代码中时,您可能需要考虑将此方法分解为更小的部分。

< P>如果您想记录NULL的确切参数(听起来好像调试是不可能的)您将需要单独测试每个参数是否为null,如果该参数为null,并将参数名称作为字符串传递给


这是接受20个参数的方法可能导致棘手维护问题的一个原因(众多原因之一)。它表明一个方法可能有太多的责任,并且可能试图做得比它应该做的更多。当您在代码中时,您可能需要考虑将此方法分解为更小的部分。

< P>确定对象引起的最简单的方法是将调试器附加到您所运行的任何代码。您可能需要运行一个单独的服务器,运行在调试模式下生成的代码。在Visual Studio中,如果进入调试->异常。。。菜单项您将有一个包含两列的异常类型对话框。检查抛出的列中是否存在公共语言运行时异常。然后尝试引发异常的操作。这是导致问题的最简单方法

另一件事,你可以尝试看看是否有任何副作用是由这个错误引起的出现和追溯它从那里


您还可以打印错误的整个堆栈跟踪,而不仅仅是错误消息。这可能会为您提供所需的详细信息。

确定导致此问题的对象的最简单方法是将调试器附加到您正在运行的任何代码上。您可能需要运行一个单独的服务器,运行在调试模式下生成的代码。在Visual Studio中,如果进入调试->异常。。。菜单项您将有一个包含两列的异常类型对话框。检查抛出的列中是否存在公共语言运行时异常。然后尝试引发异常的操作。这是导致问题的最简单方法

另一件事,你可以尝试看看是否有任何副作用是由这个错误引起的出现和追溯它从那里


您还可以打印错误的整个堆栈跟踪,而不仅仅是错误消息。这可能会为您提供所需的详细信息。

如果您知道异常发生的位置,您可以使用“获取更多信息”来拆解程序集


否则:不,没有机会获取导致异常的参数名,除非存在argumentException(参数名包含在异常中)

如果您知道异常发生的行,您可以使用获取更多信息来反汇编程序集


否则:不,没有机会获得参数名,这会导致异常,除非有argumentException(参数名包含在异常中)

在任何情况下,拥有20个参数的方法都是个坏主意…这不是主要问题,就连我在一个有6个参数的方法中也遇到了同样的问题……如果你在多个地方遇到了这个问题,那么@Andrew Hare下面的答案就是你想听的。您需要更加防御性地编程,因为当您不希望参数为null时,代码正在传递null参数。这意味着您必须在调用代码时更加小心,否则您不能以您认为可以的方式信任调用代码。这个错误是代码中一个更大问题的症状。在任何情况下,使用20个参数的方法都是一个坏主意…这不是主要问题,因为即使我在使用6个参数的方法中也有同样的问题…如果您在多个地方遇到这个问题,那么@Andrew Hare下面的答案就是您想要听到的。您需要更加防御性地编程,因为当您不希望参数为null时,代码正在传递null参数。这意味着您必须在调用代码时更加小心,否则您不能以您认为可以的方式信任调用代码。此错误是代码中更大问题的症状。