我有在服务器上运行的DLL,我无法调试它有很多原因,我记录了它的例外情况
有时我在一个方法调用中有"Object reference not set to an instance of an object"
,它有大约20个参数,从我很长一段时间就知道导致异常的对象在哪里。
如果"Object reference not set to an instance of an object"
具有导致异常的对象名称,是否有办法记录异常?
答案 0 :(得分:2)
如果你想 log 确切的参数为null(听起来好像调试是不可能的),你需要单独测试每个参数为null并抛出ArgumentNullException
对于该参数,如果它为null,并且参数的名称作为字符串传递给exception's constructor。
这是(在许多情况下)接受20个参数的方法可能导致严重维护问题的一个原因。它表明一种方法可能有太多的责任,可能正在尝试做更多的事情。当您使用代码时,您可能需要考虑将此方法分解为更小的部分。
答案 1 :(得分:1)
如果您知道发生异常的行,您可以使用Redgate .NET Reflector Free反汇编程序集获取更多信息!
否则:不,没有机会获得引起异常的参数名,除非有一个argumentException(其中参数的名称包含在异常中)
答案 2 :(得分:0)
确定导致此问题的对象的最简单方法是将调试程序附加到您运行的任何代码。您可能需要运行一个运行在调试模式下构建的代码的单独服务器。在Visual Studio中,如果您进入Debug - >例外...菜单项您将拥有一个包含两列的异常类型的对话框。检查Thrown列中的Common Language Runtime Exceptions。然后尝试抛出异常的操作。这是造成问题的最简单方法。
您还可以尝试查看是否存在由于此错误导致的任何副作用,并从那里追溯它。
您还可以打印错误的整个堆栈跟踪,而不仅仅是错误消息。这可能会为您提供所需的详细信息。