수색…


소개

스택 트레이스는 프로그램을 디버깅 할 때 큰 도움이됩니다. 프로그램이 예외를 throw 할 때 스택 추적을 얻고 프로그램이 비정상적으로 종료 될 때가 있습니다.

Windows Forms에서 간단한 NullReferenceException에 대한 스택 추적

예외를 throw하는 작은 코드를 작성해 보겠습니다.

private void button1_Click(object sender, EventArgs e)
{
    string msg = null;
    msg.ToCharArray();
}

이것을 실행하면 다음 예외 및 스택 추적을 얻습니다.

System.NullReferenceException: "Object reference not set to an instance of an object."
   at WindowsFormsApplication1.Form1.button1_Click(Object sender, EventArgs e) in F:\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs:line 29
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)

스택 트레이스는 이와 같이 계속되지만이 부분은 우리의 목적에 충분할 것입니다.

스택 추적의 맨 위에 다음 줄이 표시됩니다.

F : \ WindowsFormsApplication1 \ WindowsFormsApplication1 \ Form1.cs의 WindowsFormsApplication1.Form1.button1_Click (개체 보낸 사람, EventArgs e) : 줄 29

이것이 가장 중요한 부분입니다. 그것은 우리에게 예외가 발생한 정확한 행을 알려줍니다 : Form1.cs의 29 행.
그래서 여기가 검색을 시작하는 곳입니다.

두 번째 줄은

System.Windows.Forms.Control.OnClick에서 (EventArgs e)

이것은 button1_Click 을 호출하는 메서드입니다. 이제는 오류가 발생한 button1_ClickSystem.Windows.Forms.Control.OnClick 에서 호출되었음을 알았습니다.

우리는 이것을 계속 할 수 있습니다. 세 번째 줄은

System.Windows.Forms.Button.OnClick (EventArgs e)

이것은 System.windows.Forms.Control.OnClick 을 호출하는 코드입니다.

스택 추적은 코드에서 Exception이 발생할 때까지 호출 된 함수 목록입니다. 그리고 이것을 따라하면 문제가 발생할 때까지 코드가 어떤 실행 경로를 따라 갔는지 알아낼 수 있습니다!

스택 추적에는 .Net 시스템의 호출이 포함됩니다. 당신은 일반적으로 모든 마이크로 소프트의 System.Windows.Forms 코드를 따라 가면서 무엇이 잘못되었는지를 알아낼 필요가 없으며, 자신의 애플리케이션에 속한 코드 만 찾을 수 있습니다.

그래서, 왜 이것을 "stack trace"라고 부릅니까?
왜냐하면, 프로그램이 메소드를 호출 할 때마다, 프로그램은 그것이 어디 있는지를 추적하기 때문입니다. 그것은 "스택"이라고 불리는 데이터 구조를 가지고 있으며, 마지막 위치를 덤프합니다.
메서드 실행이 끝나면 메서드를 호출하기 전의 스택 위치를보고 스택에서 계속됩니다.

따라서 스택은 새로운 방법을 호출하기 전에 중단 된 부분을 컴퓨터에 알립니다.

하지만 디버깅에 도움이됩니다. 형사가 범죄를 저지를 때 수행 한 단계를 추적하는 형사처럼 프로그래머는 스택을 사용하여 프로그램이 충돌하기 전에 취한 단계를 추적 할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow