본문 바로가기

TIL

TIL 44일차

디버깅

모든 소프트웨어에서 소스 코드의 오류 또는 버그를 찾아서 수정하는 과정

디버깅이 필요한 코딩 오류

  • 구문 오류: 컴퓨터 프로그램에 잘못 입력된 명령문이 있을 때 발생하는 버그. 워드 프로세싱의 오타 또는 철자 오류가 있다. 구문 오류가 있으면 프로그램이 컴파일되거나 실행 자체가 안되기 때문에 쉽게 찾을 수 있다
  • 의미론적 오류: 프로그래밍 명령문을 잘못 사용할 때 발생. 예를 들어 프로그램의 사칙연산 우선순위를 생각하지 않고 수식을 짰을 때 잘못 계산된 값에 의해 오류가 날 수 있다
  • 논리 오류: 프로그래머가 컴퓨터 프로그램의 단계적 프로세스나 알고리즘을 잘못 입력할 때 발생. 잘못된 if - when 결과가 이에 해당한다. 여러 가지 입력/출력 시나리오의 코드를 단계별로 살펴보면 논리 오류를 찾아낼 수 있다.
  • 런타임 오류: 소프트웨어 코드가 실행되는 컴퓨팅 환경으로 인해 주로 발생한다. 메모리 공간 부족 또는 스택 오버플로등이 이유가 될 수 있다. try-catch 블록의 명령문을 둘러싸거나 적절한 메시지로 예외를 로깅하여 런타임 오류를 해결할 수 있다.

일반적인 디버깅 전략

  • 점진적 개발: 코드의 작은 부분을 자주 테스트할 수 있도록, 관리가 용이한 섹션으로 나누어 프로그램을 개발하는 방식. 이렇게 함으로써, 프로그래머는 발견한 모든 버그를 현지화할 수 있다. 또한 코드의 큰 섹션을 작성한 후 여러 개의 오류를 해결하는 것이 아니라, 한 번에 하나의 버그만 해결할 수 있게 한다.
  • 역추적: 특히 소규모 프로그램에서 널리 사용되는 디버깅 방식으로, 개발자는 치명적인 오류가 발생한 위치부터 역방향으로 작업하여, 코드에서 정확한 발생 지점을 찾을 수 있다. 코드 줄의 수가 증가할수록 실행하기가 어려워진다는 단점이 있다.
  • 원격 디버깅: 로컬 시스템과 분리된 환경에서 실행되는 애플리케이션을 디버깅하는 것이다. 예를 들어 원격으로 설치된 디버깅 도구를 사용하여 버그를 해결할 수 있다.
  • 로깅: 대부분의 컴퓨터 프로그램은 내부 데이터와 실행 시간 및 운영 체제 상태와 같은 기타 중요한 정보를 로그 파일에 기록하기 때문에, 개발자는 이 로그 파일을 조사하여 버그를 찾고 해결할 수 있다. 또한 로그 분석기와 같은 도구를 사용하여 로그 파일의 처리를 자동화할 수도 있다.
  • 클라우드 디버깅: 개발자가 로컬 시스템에서 클라우드 아키텍처를 에뮬레이트해야 하기 때문에, 복잡한 클라우드 애플리케이션을 디버깅하기는 어렵다. 시간 경과에 따라, 클라우드 환경과 에뮬레이트 환경 간에 구성 차이가 발생할 수 있고, 이로 인해 프로덕션에서 버그가 증가하고 개발 주기가 길어진다. 보다 효율적인 클라우드 디버깅을 위해 특수한 도구가 필요할 수 있다.

안드로이드 앱 디버깅

코드에 로그 넣는 방법

  • Log.v(String tag, String msg): Verbose - 매우 낮은 우선순위의 로그 메시지에 사용
  • Log.d(String tag, String msg): Debug - 디버깅 목적으로 사용
  • Log.i(String tag, String msg): Info - 일반적인 정보를 나타내기 위해 사용
  • Log.w(String tag, String msg): Warn - 경고나 예상치 못한 상황을 나타낼 때 사용
  • Log.e(String tag, String msg): Error - 심각한 오류를 보고할 때 사용
  • Log.wtf(String tag, String msg): What a Terrible Failure - 시스템이 죽어버릴 정도로 심각한 상황을 나타낼 때 사용

안드로이드에서 발생하는 버그의 종류

  • Syntax Error: 코틀린 문법 오류, Android API의 Method 이름, 리소스 명, 오타등등 미리 정의되지 않은 구문을 사용할때 발생한다.

빨간색으로 강조된다

  • 런타임 에러: 앱 구동중에 발생하는 에러, 앱 구동중 메모리 부족이나 배열의 잘못 된 주소값 할당, 객체의 생성자가 실행되지도 않았는데 객체를 사용하려고 할 때, 특정 뷰(View)를 사용할 때에는 그에 맞는 id를 지정해주어야 하는데 그렇지 못 할 경우 등등.. 너무나 다양함

  • 로그켓 화면에서 에러 위치 및 Exception 정보를 확인하고 수정한다.

  • Logical Error: 소스 코드 컴파일도 정상적으로 되고 런타임상 에러가 발생하는 것도 아닌 개발자의 의도와는 다르게 동작하는 에러를 뜻한다. Logical Error를 해결하기 위해 아래에 있는 디버깅 모드를 사용한다

디버깅 모드 사용하기

  1. 중단점 걸기
    코드 번호를 클릭하면 중단점이 걸린다
  2. 디버깅 모드로 실행하기
    벌레 모양 아이콘
    클릭하면 디버그 탭이 자동으로 열린다
  3. 디버깅 툴 아이콘 사용법
    다음 중단점까지 앱을 실행
    현재 진행 중인 코드로 이동
    break point에서 코드의 다음 줄로 이동

 

 

 

'TIL' 카테고리의 다른 글

TIL 46일차 - 최종프로젝트  (0) 2024.05.27
TIL 45일차  (0) 2024.05.08
TIL 43일차  (0) 2024.04.30
TIL 42일차  (0) 2024.04.19
TIL 41일차  (0) 2024.04.17