2009-03-27 5 views
17

어떻게 행 번호가 오류를 일으켰는지 표시하고 .NET이 .exes를 컴파일하는 방식으로 이것이 가능합니까?예외 처리에 행 번호 표시하기

만약 거기에 자동으로 Exception.Message에 대한 찾아내는 하위 표시 할 수 있습니까?

try 
{ 
    int x = textbox1.Text; 
} 
catch(Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 
+0

이 코드는 어떻게 컴파일됩니까? –

+5

그것은 단지 예제로 보여주기 위해 만든 것입니다. – Crash893

+0

중복 가능 http://stackoverflow.com/questions/8338495/how-to-get-error-line-number-of-code-using-try-catch –

답변

44

전체 스택 추적을 얻으려면 ex.ToString()을 사용하십시오.

릴리스 모드에서도 디버깅 기호 (.pdb 파일)로 컴파일해야 줄 번호를 가져올 수 있습니다 (프로젝트 빌드 속성의 옵션).

+3

+1 PDB 파일 및 행 번호 –

+1

웹 프로젝트이고 서버에 pdbs를 배포하려는 경우 패키지/게시 웹 섹션의 프로젝트 옵션에서 "생성 된 디버그 심볼 제외"를 선택 해제하십시오. –

+0

누군가 "디버깅 기호로 컴파일"에 대한 설명을 제공 할 수 있습니까? 내 프로젝트에 'DEBUG 상수 정의', 'TRACE 상수 정의'및 '디버그 정보 : 전체'가 있으며 행 번호가 표시되지 않습니다. MSDN에서는 속성 페이지의 왼쪽 창에서 빌드 탭을 클릭 한 다음 사용하려는 컴파일러 설정에 대한 확인란을 선택하고 사용하지 않으려는 설정의 확인란 선택을 취소합니다. 도움이됩니다. – omJohn8372

4

'StackTrace'을 사용하고 .pdb 파일을 작업 디렉터리에 포함하면 스택 추적에 줄 번호가 포함되어야합니다.

25

더 자세한 정보가 필요하면, 당신은 (여기 당신이 시도하기위한 몇 가지 코드)를 System.Diagnostics.StackTrace 클래스를 사용할 수 있습니다 e.StackTrace

을 사용하여, 주어진 예외의 스택 트레이스를 보려면 :

try 
{ 
    throw new Exception(); 
} 
catch (Exception ex) 
{ 
    //Get a StackTrace object for the exception 
    StackTrace st = new StackTrace(ex, true); 

    //Get the first stack frame 
    StackFrame frame = st.GetFrame(0); 

    //Get the file name 
    string fileName = frame.GetFileName(); 

    //Get the method name 
    string methodName = frame.GetMethod().Name; 

    //Get the line number from the stack frame 
    int line = frame.GetFileLineNumber(); 

    //Get the column number 
    int col = frame.GetFileColumnNumber(); 
} 

가 어셈블리에 사용할 수있는 pdb 파일이있는 경우에만 작동합니다. 프로젝트 속성 - 빌드 탭 - 고급 - 디버그 정보 선택을보고 pdb 파일이 있는지 확인하십시오.

+0

첫 번째 스택 프레임을 얻는 이유는 무엇입니까? 마지막 스택 프레임에 관심이 있습니까? 즉 StackFrame frame = st.GetFrame (st.FrameCount - 1) –

+0

WCF 웹 서비스에서이 사용하여 시도한 및 줄 반환합니다 항상 0입니다. 이것은 .pdb 파일이있는 디버그 모드입니다. –

1
string lineNumber=e.StackTrace.Substring(e.StackTrace.Length - 7, 7);