2012-04-13 3 views
2

광산의 응용 프로그램에서 여러 가지 오류 보고서가 발생했습니다. 내 코드의 다른 부분에서 호출되는 정적 정적 메서드가 여러 개있는 정적 클래스가 있습니다. 이러한 메소드의 대부분은 XML 문서에 요소를 작성합니다. 생성정적 메서드 Null 포인터 오류

private static XmlElement BuildCmd(string name) 
{ 
    XmlElement e = OtherClass.NewElement("CMD"); 
    e.SetAttribute("type", name); 
    return e; 
} 

public static uint SendFlightReport(FlightData info, AircraftInfo aInfo) 
{ 
    XmlElement cmd = BuildCmd("pirep"); 
    .... 
    some other stuff 
    .... 
} 

스택 덤프 :

이러한 방법의 가장 첫 줄

은 XML 문서의 요소를 생성하고 그것을 반환과 같이 동일한 클래스 전용 정적 메소드를 호출 인 예외로 모두 BuildCmd를 불쾌한 선이라고 부르는 행을보고합니다. 이는 의미가 없습니다. 정적 메서드를 호출 할 때 null 포인터 (또는 C#에서는 개체 참조가 개체의 인스턴스로 설정되지 않음)를 가질 수 있습니까?

편집 :

public class OtherClass { 

    private readonly XmlDocument doc = new XmlDocument(); 

    public XmlElement NewElement(string name) { 
     lock (doc) 
     return doc.CreateElement(name); 
    } 
} 
+3

가능한 범인 :'OtherStaticClass' (아마도 정적 생성자) 또는'e' (OtherStaticClass.NewElement''의 반환 값). 디버깅을 시도 했습니까? –

+1

"다른 것들"을 보여주십시오. 나는 (슬프게도, 큰 빈도로) 생산 환경의 스택 추적에서 라인 번호가 종종 완전히 잘못되었다는 사실과 씨름해야했다. 'BuildCmd ("pirep")'가 NRE를 던질 수 없다는 것은 (고통스럽게) 명백합니다. 그래서 그렇지 않습니다. 그러나 스택 추적의 메서드 이름은 결코 잘못되지 않습니다. 그래서 실제로'SendFlightReport'를 비난한다면, NRE는 거기에서 * defintely * 일어나고 있습니다. 전체 방법을 게시하십시오. –

+0

"OtherStaticClass.NewElement ..."의 구현을 보여주는 것이 가치 있다고 생각합니다. – grant

답변

-1

당신이 릴리스 빌드를 실행하는 의심 : 질문 사람들을 위해, 여기 OtherClass.NewElement에 대한 코드입니다. 이 경우 컴파일러 최적화로 인해 행 번호가 약간 벗어나는 경우가 있습니다. 디버그 빌드를 실행 해보십시오. 당신은 아마 (... VB.NET,하지만 여전히) 예외가 실제로

https://stackoverflow.com/a/114854/385844

http://social.msdn.microsoft.com/Forums/zh/vsdebug/thread/afb7ae70-3e0c-4ea9-86ab-633fe1f9cf6a 예를 들어, .... some other stuff ....

페이지의 첫 번째 또는 두 번째 줄에 발생되고 있음을

을 찾을 수 있습니다

http://social.msdn.microsoft.com/Forums/en-US/tfsbuild/thread/6af62159-fe6b-4554-8e46-d2b6c06fa253

+1

Downvoter, 의견을 보내시겠습니까? – phoog

+1

나는 downvote를하지 않았지만 문제의 코드가 OP의 실제 코드에서 직접 나온 것으로 가정하고있는 것 같습니다. 여기에있는 질문에서 보았던 것을 토대로 한 꽤 광범위한 가정입니다. –

+0

그런 경우입니까? 나는 전에 다른 스택 트레이스를 보아 본 적이 없다. –