Move Trace Debugger
Visual Studio Code용 Move Trace Debugger extension은 Move 단위 테스트와 온체인 transaction, 그리고 PTB debugging 지원을 위한 익숙한 debugging interface를 제공하며, PTB command의 상태를 검사하고, code 실행을 단계별로 진행하고, 지역 변수 값을 추적하고, 단위 테스트 또는 온체인 Move call에서 Move code에 줄 breakpoint를 설정할 수 있게 해준다.
Debugging은 trace 생성으로 활성화되며, trace는 unit test execution 중 또는 온체인 transaction replay 중에 생성할 수 있다.
Install
디버거는 Move Analyzer VS Code 확장 프로그램을 설치해 사 용하며, 이 extension에는 Move Trace Debugger extension이 포함되어 있으므로 별도로 설치할 필요가 없지만, 경우에 따라 별도 설치가 필요할 수 있어 설치 지침을 포함한다.
Move Trace Debugger extension은 Visual Studio Code Marketplace에서 사용할 수 있다.
Extensions 보기에서 Move Trace Debugger를 검색하거나, Ctrl + P 또는 ⌘ + P를 누른 뒤 ext install mysten.move-trace-debug를 입력한다.
또는 command line에서 code --install-extension mysten.move-trace-debug를 실행해 extension을 설치한다.
단위 테스트와 온체인 transaction debugging을 가능하게 하는 unit execution trace를 생성하려면 tracing 기능 플래그가 활성화된 sui 바이너리가 설치되어 있어야 한다.
release tarball, Homebrew, 그리고 Chocolatey 설치에 포함된 sui 바이너리에는 이 기능이 활성화되어 있다.
자세한 내용은 Sui 설치를 참고한다.
Features
디버거는 Move 단위 테스트를 debugging하든 온체인 Move call을 debugging하든 모든 Move code debugging에 공통된 기능 집합을 제공한다.
온체인 transaction을 debugging할 때 Move call은 여러 PTB command 중 하나일 뿐이다.
디버거는 Move call 자체뿐 아니라 나머지 모든 native PTB command의 상태와 실행도 검사하도록 지원한다.
Move code debugging features
현재 Move Trace Debugger는 execution trace를 따라 앞으로 진행하는 debugging을 지원한다.
역방향 debugging은 현재 사용할 수 없다.
Disassembly and source-level debugging
단위 테스트를 debugging할 때의 source code는 정의상 उपलब्ध하며, 단위 테스트용 debug session을 시작하면 source view에서 시작하게 된다.

온체인 transaction을 debugging할 때는 transaction 안에서 실행된 Move call의 source code가 온체인에 저장되지 않으므로 기본적으로 사용할 수 없다.
debug session은 Move code가 디스어셈블된 bytecode로 표현되는 disassembly view에서 시작된다.

이것은 Move code의 더 낮은 수준 표현이지만 Move code의 동작과 실행 흐름에 대한 이해를 높 이는 데 여전히 매우 유용하다.
또한 source view에 비해 한 가지 장점이 있는데, execution trace에 기록된 내용과 훨씬 더 잘 일치한다는 점이다.
Move compiler 최적화가 존재할 때 disassembly view는 궁극적인 source of truth이다.
예를 들어 source에 있는 일부 변수는 trace에는 더 이상 존재하지 않을 수 있으며, 이는 disassembly view에서 확인할 수 있다.
여전히 source code for on-chain transactions by hand를 제공해 source view를 활성화할 수 있다.
온체인 transaction용 source-level debugging을 자동화하는 지원은 향후 제공될 예정이다.
source code와 디스어셈블된 bytecode를 모두 사용할 수 있다면 command palette의 Move: Toggle source view 및 Move: Toggle disassembly view command를 통해 source view와 disassembly view 사이를 전환할 수 있다.
이 command는 macOS에서는 Shift + ⌘ + P, Windows/Linux에서는 Ctrl + Shift + P로 열 수 있다.
Stepping through code execution
Move Trace Debugger는 다음 표준 debug actions을 지원한다:
- Step Over
- Step Into
- Step Out
- Continue
- Restart
- Stop
다른 function call 안으로 code를 단계 실행해 들어가면 왼쪽 사이드바의 call stack view가 업데이트된다.

Tracking variable values
Move Trace Debugger는 primitive type, Move struct, 그리고 reference의 값을 표시하는 기능을 지원한다.
source code에 있는 일부 변수는 Move compiler에 의해 최적화로 제거될 수 있으며 기본 trace에서는 사용할 수 없다는 점에 유의한다.
따라서 해당 값은 디버거가 추적할 수 없다.

디버거는 현재 변수에 watch point를 설정하는 기능을 지원하지 않는다.
Line breakpoints
코드에서 원하는 줄에 커서를 두고 메인 메뉴에서 Run -> Toggle Breakpoint를 선택해 줄 breakpoint를 설정한다.
Continue debug command를 사용해 다음 breakpoint까지 실행을 진행할 수 있다.

PTB debugging features
PTB를 debugging할 때 디버거는 먼저 PTB 구조의 요약을 표시한다.
다음 예시에서는 debugging 중인 PTB가 여러 Move call과 여러 native PTB command(Split Coins, Merge Coins, Transfer Objects)로 구성되어 있음을 볼 수 있다.

PTB summary에서는 Move code를 debugging할 때 function 안으로 step into 하거나 step over 하듯이 특정 command 안으로 step into 하거나 이를 step over 할 수 있다.
PTB summary view에서는 현재 breakpoint 설정을 지원하지 않는다.
Move function 안으로 step into 하면 관련된 모든 features, 즉 값 추적, breakpoint 등이 उपलब्ध한 상태로 Move code debugging이 시작된다.
native command 안으로 step into 하면 그 입력값과 결과값을 검사할 수 있다.

native command를 "통과하며" step하는 기능은 없다.
상태를 검사한 뒤에는 밖으로 step out 하거나 계속 step해서 다음 command로 이동할 수만 있다.