> For the complete documentation index, see [llms.txt](https://mellona-log.gitbook.io/log/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mellona-log.gitbook.io/log/book/learn-errors/3.md).

# 3장 효율적으로 에러의 원인 찾기

디버깅에 대한 방법을 배우자. 이것이 바로 효율적으로 에러의 원인을 찾는 방법

디버깅이란 에러의 원인을 특정하고 수정하는 작업이다. 앞 장에서 나온 에러를 읽는 것도 디버깅의 한 가지라고 할 수 있다.

## 01. 디버깅이란?

> 디버깅(debugging)이란 에러의 실제 원인을 찾고 수정하는 작업을 말한다. 디버깅 스킬은 효율적인 프로그래밍에 큰 영향을 준다.

\
디버그(debug) =프로그램 내 에러를 의미하는 버그(bug) + de(제거하다)

### 1) 디버깅의 흐름

원인 찾기 → 에러 읽기 → 원인 파악 → 수정하기                →         ?       → 원인 파악 → 수정하기<br>

> 과장해서 표현하자면 디버깅은 에러의 원인만 특정할 수 있다면 이미 끝난 것이나 다름없다.

\
에러가 보이지 않거나 에러를 이해할 수 없을 때도 있다. 이때는 프린트 디버깅 방법과 이진 탐색을 활용하여 에러의 원인을 찾아볼 수 있다.

### 2) 프린트 디버깅을 해보자

> 프린트 디버깅의 프린트는 문자 그대로 프로그램이 무언가를 출력(print)한다는 의미로, 디버깅 중 프로그램의 상태를 표시하기 위해 사용한다.

\
각 프로그래밍 언어에는 변수를 출력하기 위한 함수가 존재하는데, 이 출력 함수를 사용하면 프로그램에서 변수의 내용을 확인하고 프로그램의 상태를 해석하면서 문제가 발생한 위치 특정 가능하다.

```
function calcSum(a, b) {console.log('인수의 값 : a = ${a} / b = ${b}');const sum = a + b;console.log（'처리 결과 : sum = ${suin}'）;return sum;const sum = calcSumO, 2）;console.log（'함수의 반환값 : ${sum}'）;
```

> 특정 위치의 변숫값을 출력하면서 프로그램이 정상적으로 작동하는지 확인하는 것이 프린트 디버깅의 기본
