Electron 디버깅
Electron에서 발생하는 문제와 버그를 디버깅하는 방법은 다양하며, 일부는 플랫폼에 따라 다르다. 아래에서 일반적으로 사용되는 몇 가지 접근 방식을 소개한다.
일반적인 디버깅 방법
Chromium은 C++와 Objective-C++에서 콘솔에 정보를 출력해 디버깅을 돕는 로깅 매크로를 제공한다. 이 기능을 사용해 변수 값, 함수 이름, 라인 번호 등을 출력할 수 있다.
예시:
LOG(INFO) << "bitmap.width(): " << bitmap.width();
LOG(INFO, bitmap.width() > 10) << "bitmap.width() is greater than 10!";
로깅에는 INFO
, WARN
, ERROR
등 다양한 심각도 수준이 있다.
더 많은 정보와 예시는 Chromium 소스 트리의 logging.h 파일을 참고한다.
스택 트레이스 출력하기
Chromium은 프로그램 실행을 중단하지 않고 콘솔에 스택 트레이스를 출력하는 헬퍼를 제공한다.
#include "base/debug/stack_trace.h"
...
base::debug::StackTrace().Print();
이 기능을 사용하면 호출 체인을 확인하고 잠재적인 문제 영역을 파악할 수 있다.
브레이크포인트 디버깅
주의: 이 방법은 빌드 크기를 크게 증가시켜 약 50GB의 디스크 공간을 차지한다.
electron/.git/info/exclude/debug.gn
파일에 다음 내용을 작성한다:
import("//electron/build/args/testing.gn")
is_debug = true
symbol_level = 2
forbid_non_component_debug_builds = false
그리고 다음 명령어를 실행한다:
$ gn gen out/Debug --args="import(\"//electron/.git/info/exclude/debug.gn\") $GN_EXTRA_ARGS"
$ ninja -C out/Debug electron
이제 LLDB
를 사용해 브레이크포인트 디버깅을 할 수 있다.
플랫폼별 디버깅 가이드
심볼 서버를 활용한 디버깅
심볼 파일은 더 나은 디버깅 환경을 제공한다. 실행 파일과 동적 라이브러리에 포함된 함수 정보를 담고 있어, 깔끔한 호출 스택을 확인할 수 있도록 돕는다. 심볼 서버는 사용자가 대용량 디버깅 파일을 다운로드하지 않아도 디버거가 올바른 심볼, 바이너리, 소스 코드를 자동으로 로드할 수 있게 해준다.
Electron에서 심볼 서버를 설정하는 방법에 대한 자세한 내용은 심볼 서버를 사용한 디버깅 문서를 참고한다.