Debugging Golang Process

Container에서 실행 중인 Golang 프로세스를 debugging
Container에 delve가 없으니 설치를 해야 합니다.
$ git clone https://github.com/go-delve/delve $ cd delve $ go install github.com/go-delve/delve/cmd/dlv
Bash
복사
delve가 설치 경로를 찾아서 go/bin 으로 옮기기
$ find / -name dlv 2> /dev/null /root/delve/cmd/dlv $ find / -path /mnt -prune -o -name dlv 2> /dev/null
Bash
복사
Process의 PID 알아내서 연결하기
$ ps -ef $ dlv attach <PID> Type 'help' for list of commands. (dlv)
Bash
복사
현재 실행 중인 goroutine 열거하기
(dlv) goroutines <>
Shell
복사
goroutine의 stack 확인하기
(dlv) goroutine <> stack
Shell
복사
계속 진행하려면, continue 명령 사용하기 / 디버그 모드 진입하려면 Ctrl + C
(dlv) continue // Ctrl + C
Shell
복사
Troubleshoot
기본적으로 container 환경에서 attach 권한이 없기 때문에 error가 발생을 한다.
$ dlv attach <PID> Could not attach to pid <PID>: this could be caused by a kernel security setting, try writing "0" to /proc/sys/kernel/yama/ptrace_scope $ echo 0 | tee /proc/sys/kernel/yama/ptrace_scope tee: /proc/sys/kernel/yama/ptrace_scope: Read-only file system 0
Bash
복사
Docker run 단계에서 privileged 옵션을 주면 해결이 된다.
$ docker run --privileged <image_id> $ docker exec -it <container_id> /bin/bash
Bash
복사