2010-11-27 7 views
0

서버에서 실행되는 DLL이 있는데 여러 가지 이유로 디버깅 할 수 없으므로 예외를 기록합니다.
가끔은 예외를 발생시키는 객체가 어디 있는지 오래 기억할 수있는 약 20 개의 매개 변수가있는 메서드 호출에 "Object reference not set to an instance of an object"이 있습니다.정확히 어떤 개체가 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다"?

"Object reference not set to an instance of an object"의 경우 예외를 발생시키는 개체의 이름을 사용하여 예외를 기록 할 수있는 방법이 있습니까?

+4

갖는 방법 (매개 변수의 이름이 예외에 포함되어 있습니다) ArgumentException이 거기를 제외하고 아니, 예외를 발생시킨 매개 변수 이름을 얻을 수있는 기회가 없다 인 어떤 경우 에라도 나쁜 생각이 ... –

+0

심지어 내가 문제 wih 6 매개 변수에 동일한 문제가 있기 때문에 주요 문제가되지 않습니다 ... –

+0

다음 여러 장소 에서이 문제가 있다면 @ 앤드류 토끼의 대답은 당신이 듣고 싶은 것. 코드가 널 (null)이 될 것으로 예상하지 않을 때 널 (null) 인수를 전달하기 때.에 더 방어 적으로 프로그램해야합니다. 즉, 코드 호출에 신중을 기해야하며 코드 호출을 신뢰할 수 없다고 생각할 수 있습니다. 이 오류는 코드에서 더 큰 문제의 증상입니다. –

답변

2

당신은 로그 (이 밖으로 질문 디버깅 같은 소리)가 null의 경우 당신은 널 (null)에 대해 개별적으로 각각의 매개 변수를 테스트하고 해당 매개 변수에 대한 ArgumentNullException을 던질 필요가 null의 정확한 인수합니다 매개 변수의 이름은 문자열로 exception's constructor에 전달됩니다.

20 가지 매개 변수를 허용하는 방법은 유지 관리 문제로 이어질 수 있습니다. 이는 메소드가 너무 많은 책임을지며 그것이해야하는 것보다 더 많은 것을하려고 시도 할 수 있음을 나타냅니다. 코드를 작성하는 동안이 방법을 작은 조각으로 나누는 것이 좋습니다.

0

어떤 개체가이 문제를 일으키는 지 확인하는 가장 쉬운 방법은 실행중인 코드에 디버거를 연결하는 것입니다. 아마도 디버그 모드로 작성된 코드를 실행하는 별도의 서버를 실행해야합니다. Visual Studio에서 Debug -> Exceptions ... 메뉴 항목을 선택하면 두 개의 열이있는 예외 유형의 대화 상자가 나타납니다. 공용 언어 런타임 예외에 대해서는 Throw 열을 확인하십시오. 그런 다음 예외가 throw되는 작업을 시도하십시오. 이것이 어떤 물체가 문제를 일으키는 가장 쉬운 방법입니다.

또 다른 문제는이 오류로 인해 발생하는 영향을 받고 거기에서 다시 추적하는 것입니다.

오류 메시지 대신 오류에 대한 전체 스택 추적을 인쇄 할 수도 있습니다. 그게 당신에게 필요한 세부 사항을 줄 수 있습니다.

1

예외가 발생한 행을 알고있는 경우 자세한 정보를 얻으려면 Redgate .NET Reflector Free을 사용하여 어셈블리를 분해 할 수 있습니다!

그렇지 않으면 : 20 개 매개 변수