안녕하세요, sigmoid입니다.
오늘은 Go프로그램을 간단하게 디버깅하는 방법을 정리해 보고자 합니다. 지난번 작성했던 포스팅에서 log를 추가하여 이더리움 트라이 생성과정을 알아봤는데, debugger를 사용해서 보는 것도 좋겠다는 친한 동생의 의견이 있었습니다.(thx 혜종)
Goland IDE를 먼저 추천받긴 했는데, gdb가 체질상 잘맞는지라 비슷한 delve를 사용해 보았습니다.
간단히 바이너리만 설치해서 trie관련 테스트 코드 그대로 진행하겠습니다.
- 설치: go get -u github.com/derekparker/delve/cmd/dlv
- 실행: dlv debug . (main.go가 있는 위치로 가서 실행)
- breakpoint잡기: b 파일위치:라인번호
b src/github.com/ethereum/go-ethereum/trie/trie.go:220 - bp로 잘 걸렸나 확인
Breakpoint 1 at 0x60ac5b for github.com/ethereum/go-ethereum/trie.(*Trie).insert() /home/naksir/go/src/github.com/ethereum/go-ethereum/trie/trie.go:220 (1) - c로 break point까지 실행
- step(s), stepout, next(n) 를 통해 실행해보면 됩니다.
- exit로 종료
사용법을 익혔으니, 이제 c, n 과 s 를 사용해서 실제로 트리가 생성되는 부분의 코드를 확인해보겠습니다.
첫번째 insert에서는 root가 비었으니 short node를 생성하네요
두번째 insert입니다. 아까 숏노드를 생성했기 때문에, case문에 걸렸고,
분기를 위해 Full node를 생성하여 기존 키를 다시 삽입하는 부분입니다.
풀노드로의 삽입은 노드위치가 비어있기 때문에 short node를 생성하여 붙이고 있습니다.
이렇게 보여주는 것도 좋겠네요
(점심 시간이 끝나가서 끝까지는 못하고 마무리를 지어야 할듯합니다)
부족한 글 읽어주셔서 늘 고맙습니다.
여러분의 up vote 가 큰 도움이 됩니다.
후원: 0x62467Ca1b449c854c4720395Dd9a7c6Ed5df47B7(ethereum)