0

我有在服务器上运行的 DLL,由于多种原因我无法调试它,我记录了它的异常。
有时我"Object reference not set to an instance of an object"在一个方法调用中有大约 20 个参数,这需要我很长时间才能知道导致异常的对象在哪里。

"Object reference not set to an instance of an object"如果使用导致异常的对象的名称,有什么方法可以记录异常?

4

3 回答 3

2

如果您想记录为 null 的确切参数(听起来调试是不可能的),您将需要单独测试每个参数的 null 并ArgumentNullException为该参数抛出一个如果它为 null 并且传递的参数名称为异常构造函数的字符串。

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

于 2010-11-27T12:57:07.973 回答
1

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

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

于 2010-11-27T13:00:05.997 回答
0

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

另一件事是,您可以尝试查看是否存在由出现此错误引起的任何副作用,并从那里追溯它。

您还可以打印错误的整个堆栈跟踪,而不仅仅是错误消息。这可能会给你你需要的细节。

于 2010-11-27T12:59:10.330 回答