디버깅
OXC_LOG 환경 변수
OXC_LOG 환경 변수는 oxlint 및 oxfmt에서 런타임 추적을 활성화합니다. 설정하지 않으면 로깅은 완전히 비활성화되어 비용 없이 작동합니다.
기본 사용법
bash
# oxlint에 대한 디버그 로깅 활성화
OXC_LOG=debug oxlint
# oxfmt에 대한 디버그 로깅 활성화
OXC_LOG=debug oxfmt
# 임포트 플러그인 사용 시 리졸버 추적 활성화
OXC_LOG=oxc_resolver oxlint --import-plugin
# 포맷터 추적 활성화
OXC_LOG=oxc_formatter oxfmt필터 구문
OXC_LOG는 tracing-subscriber 필터 구문을 사용합니다:
| 패턴 | 설명 |
|---|---|
debug | 모든 모듈에 대해 디버그 레벨 활성화 |
trace | 모든 모듈에 대해 트레이스 레벨 활성화 |
oxc_resolver | oxc_resolver 모듈의 모든 로그 활성화 |
oxc_resolver=debug | oxc_resolver에 대해 디버그 레벨 활성화 |
oxc_resolver=trace | oxc_resolver에 대해 트레이스 레벨 활성화 |
oxc_formatter,oxc_resolver | 여러 모듈 활성화 |
출력
로그는 stderr로 작성되어, 정상적인 검사 진단 또는 포맷된 코드의 출력(기본적으로 stdout)과 간섭되지 않도록 합니다. oxfmt에서는 멀티스레드 작업 디버깅을 위해 스레드 이름과 스팬 타이밍 정보가 포함됩니다.
일반적인 사용 사례
처리 중인 모든 파일 목록 보기:
bash
OXC_LOG=debug oxlint
OXC_LOG=debug oxfmt모듈 해결 문제 디버깅:
bash
OXC_LOG=oxc_resolver=debug oxlint --import-pluginrust-lldb
디버그 빌드에서 패닉 정보를 얻기 위해 rust-lldb를 사용할 수 있습니다.
디버그 심볼 활성화:
toml
[profile.release]
debug = true
strip = false
panic = "unwind"바이너리 빌드:
bash
cargo build --release --bin oxlint --features allocator바이너리 실행:
bash
rust-lldb -- ./target/release/oxlint실행 후, 프로그램을 실행하려면 r 키를 누르세요.
VSCode에서 TypeScript 디버깅
디버깅 가이드에 따르면, TypeScript 저장소에서:
.vscode/launch.template.json파일 이름을launch.json으로 변경tests/cases/compiler/foo.ts추가"${fileBasenameNoExtension}"을foo.ts로 변경- TypeScript 소스 코드 내 어디든 중단점 설정
- 메뉴에서 "실행 - 디버깅" 선택, 또는 F5 키 입력
- 디버깅 중에는, 타겟 테스트 파일 전에 tsc가 전역
.d.ts파일을 평가합니다 src/compiler/debug.ts에서Debug.formatXXX(value)를 사용하여 열거형 값 출력 가능- "관찰"(WATCH) 섹션을 사용해 관심 있는 값 확인
VSCode에서 린터 디버깅
npm 프로젝트에 대해 CodeLLDB를 사용하면 린터 디버깅이 간편합니다.
.vscode/launch.json에서 필요에 따라 구성 항목을 변경하세요:
cwd: npm 프로젝트의 절대 경로args: 린터에 전달되는 인수
json
{
"type": "lldb",
"request": "launch",
"name": "Oxlint 디버깅",
"cargo": {
"env": {
"RUSTFLAGS": "-g"
},
"args": ["build", "--bin=oxlint", "--package=oxlint"],
"filter": {
"name": "oxlint",
"kind": "bin"
}
},
"cwd": "TEST-PROJECT-경로",
"args": ["--OXLINT-인수"]
}VSCode 디버깅 패널을 열고 Oxlint 디버깅을 선택한 후 디버깅 시작.
디버그 과정은 지정된 cwd로 시작되며, 테스트 프로젝트에서 린터를 실행하고 디버거를 붙이는 것처럼 동작합니다.
