전체 코드

using System.ComponentModel;

namespace CSharp
{
    internal class Program
    {
       
        //메소드 호출은 영화 Inception과 비슷하다
        // 비유 현실-> 1차꿈 -> 2차꿈
        static void Print(int value)
        {
            Console.WriteLine(value);
        }
        static int AddAndPrint(int a, int b)
        {
            int ret = a + b;
            Print(ret);
            return ret;
        }
        static int Add(int a, int b)
        {
            int ret = a + b;
            return ret;
        }
        static void Main(string[] args)
        {
            //int ret = Program.Add(10, 20);
            //ret = ret + 1;
            //Console.WriteLine(ret);

            int ret = Program.AddAndPrint(10, 20);
            ret = Program.AddAndPrint(12, 20);
            ret = Program.AddAndPrint(110, 20);
            ret = Program.AddAndPrint(101, 20);
            ret = Program.AddAndPrint(102, 20);
        }

    }
}

1. 디버깅과 자동차 제조의 비유

🔹 디버깅 모드(Debug Mode)와 출시 후 프로그램 비교

  • 자동차를 만들 때는 부품을 조립하며 결합 상태를 실시간으로 확인 가능하지만,
  • 자동차가 출고된 후에는 실시간으로 내부를 살펴볼 수 없음.
  • 만약 사고가 나면 사후 검사를 통해 원인을 분석할 수 있음.
  • 프로그램도 디버깅 모드(Debug Mode)에서는 코드를 원하는 곳에서 멈추고 살펴볼 수 있음.
  • 하지만 프로그램을 출시(Release Mode)하면 디버깅 기능 없이 빠르게 실행되도록 설정됨.
  • 출시 후 문제가 발생하면 크래시 덤프(Crash Dump)를 통해 사후 분석만 가능함.

2. 브레이크포인트(Break Point) 활용

🔹 브레이크포인트란?

  • 코드의 특정 줄에서 실행을 멈추게 하는 기능
  • 실행 도중 변수 값, 호출 스택(Call Stack), 메모리 상태 등을 확인할 수 있음.
  • 디버깅 도중 한 줄씩 실행하며 코드의 흐름을 추적 가능.

🔹 브레이크포인트 설정 방법

  • Visual Studio에서 코드 왼쪽 여백을 클릭하거나 F9 키를 눌러 설정
  • 브레이크포인트가 설정된 줄이 빨간색 원으로 표시됨

🔹 브레이크포인트 해제 방법

  • 다시 클릭하거나 F9 키를 한 번 더 누르면 해제됨


3. 조건부 브레이크포인트(Conditional Breakpoint) 활용

  • 특정 조건이 참(True)일 때만 프로그램 실행을 중지하도록 설정 가능
  • 예제: hp <= 0인 경우에만 중단
  • 설정 방법: 브레이크포인트에서 우클릭 → 조건(C) 설정

4. 코드 실행 제어(Debugging Step Execution)

디버깅 중 코드를 한 줄씩 실행하며 분석할 수 있음.
각 실행 방식에 대한 단축키와 차이점을 정리하면 다음과 같음.

단축키기능 설명
F10 (Step Over)한 줄씩 실행하되, 함수 내부로 들어가지 않음.
F11 (Step Into)한 줄씩 실행하되, 함수 내부로 들어감.
Shift + F11 (Step Out)현재 함수 실행을 완료하고, 호출한 지점으로 돌아감.
Ctrl + F5 (Continue)다음 브레이크포인트까지 빠르게 실행.

📌 비유로 이해하기

  • F10: "이 줄 실행하고 결과만 볼게!" (함수 내부 X)
  • F11: "함수 내부도 자세히 보고 싶어!" (함수 내부 O)
  • Shift + F11: "이 함수 다 봤으니 밖으로 나갈게!"
  • Ctrl + F5: "다음 중단점까지 쭉 실행해!"

5. 호출 스택(Call Stack) 활용

🔹 조사식

  • 조사식에서 값을 변경 가능
    🔹 호출 스택이란?
  • 현재 실행 중인 함수와 호출된 함수의 순서를 트리 형태로 보여줌.
  • 프로그램이 어디서 실행되고 있는지, 어떤 함수가 호출되었는지 분석 가능.
  • 디버깅 모드에서 호출 스택 창(Call Stack)을 열면 함수 호출 경로를 추적할 수 있음.

6. 디버깅 중 실행 순서 변경 가능

🔹 디버깅 도중 실행 흐름을 변경 가능

  • 실행 순서를 나타내는 화살표를 드래그하면 과거 혹은 미래로 이동 가능
  • 특정 코드가 실행되지 않도록 건너뛰거나, 다시 실행할 수도 있음
  • 이를 활용하면 특정 기능을 여러 번 테스트할 수 있음

7. 디버깅 중 변수 값 변경 가능

  • 디버깅 중 실행 중인 변수 값을 임의로 변경 가능.
  • 예를 들어, hp = 50;이었을 때, hp = 100;으로 바꿀 수도 있음.
  • 이렇게 변경된 값은 이후 실행되는 코드에 영향을 미침.

8. 모두 중단 (Break All) 기능

🔹 모두 중단 (Break All) 버튼을 누르면 현재 실행 중인 프로그램을 즉시 멈출 수 있음

  • 무한 루프가 발생했을 때 실행을 멈추고 원인을 분석할 때 유용함
  • 디버깅 도중 Pause 버튼을 누르면 현재 실행 상태에서 중지됨

9. 크래시 덤프(Crash Dump) 분석

🔹 프로그램이 실행 중 충돌(Crash)하면 크래시 덤프를 남길 수 있음

  • 크래시 덤프를 통해 프로그램이 충돌한 시점의 메모리 상태를 분석 가능.
  • 단, 실시간으로 디버깅을 진행할 수는 없음.
  • 즉, 출시된 프로그램에서 버그가 발생하면, 실행 중에 직접 살펴볼 순 없지만 덤프를 통해 사후 분석 가능.

profile
李家네_공부방

0개의 댓글