-
Notifications
You must be signed in to change notification settings - Fork 391
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
chore(gnovm): instrument debug tracing to display the caller site. #3702
Conversation
Running the gnovm with the debug traces acivated (build tag `debug`) allows to display the details of preprocessing and opcodes operations. This PR adds the caller location in source (file + line) to each trace, allowing to identify the calling context of opcodes, to ease understanding the gnovm behavior. No change when debug is disabled (the default mode). Tracing can be activated by: `go run -tags debug ./cmd/gno run args` Before: ```console DEBUG: |||| -v (true <untyped> bool) DEBUG: EXEC: (const (println func(xs ...interface{})()))((const ("i:" string)), i<VPBlock(1,0)>) DEBUG: |||| -s bodyStmt[0/0/1]=(end) DEBUG: |||| +o OpPopResults DEBUG: ||||| +x (const (println func(xs ...interface{})()))((const ("i:" string)), i<VPBlock(1,0)>) DEBUG: ||||| +o OpEval DEBUG: |||||| -o OpEval DEBUG: EVAL: (*gnolang.CallExpr) (const (println func(xs ...interface{})()))((const ("i:" string)), i<VPBlock(1,0)>) DEBUG: ||||| +o OpPrecall DEBUG: |||||| +x i<VPBlock(1,0)> DEBUG: |||||| +o OpEval DEBUG: ||||||| +x (const ("i:" string)) DEBUG: ||||||| +o OpEval DEBUG: |||||||| +x (const (println func(xs ...interface{})())) DEBUG: |||||||| +o OpEval DEBUG: ||||||||| -o OpEval DEBUG: EVAL: (*gnolang.ConstExpr) (const (println func(xs ...interface{})())) DEBUG: |||||||| -x (const (println func(xs ...interface{})())) DEBUG: |||||||| +v (println func(xs ...interface{})()) DEBUG: |||||||| -o OpEval DEBUG: EVAL: (*gnolang.ConstExpr) (const ("i:" string)) DEBUG: ||||||| -x (const ("i:" string)) DEBUG: ||||||| +v ("i:" string) DEBUG: ||||||| -o OpEval ``` After: ```console DEBUG: op_exec.go:99:|||| -v (true <untyped> bool) DEBUG: machine.go:1535:EXEC: (const (println func(xs ...interface{})()))((const ("i:" string)), i<VPBlock(1,0)>) DEBUG: op_exec.go:484:|||| -s bodyStmt[0/0/1]=(end) DEBUG: op_exec.go:488:|||| +o OpPopResults DEBUG: op_exec.go:493:||||| +x (const (println func(xs ...interface{})()))((const ("i:" string)), i<VPBlock(1,0)>) DEBUG: op_exec.go:494:||||| +o OpEval DEBUG: machine.go:1218:|||||| -o OpEval DEBUG: machine.go:1380:EVAL: (*gnolang.CallExpr) (const (println func(xs ...interface{})()))((const ("i:" string)), i<VPBlock(1,0)>) DEBUG: op_eval.go:243:||||| +o OpPrecall DEBUG: op_eval.go:247:|||||| +x i<VPBlock(1,0)> DEBUG: op_eval.go:248:|||||| +o OpEval DEBUG: op_eval.go:247:||||||| +x (const ("i:" string)) DEBUG: op_eval.go:248:||||||| +o OpEval DEBUG: op_eval.go:251:|||||||| +x (const (println func(xs ...interface{})())) DEBUG: op_eval.go:252:|||||||| +o OpEval DEBUG: machine.go:1218:||||||||| -o OpEval DEBUG: machine.go:1380:EVAL: (*gnolang.ConstExpr) (const (println func(xs ...interface{})())) DEBUG: op_eval.go:317:|||||||| -x (const (println func(xs ...interface{})())) DEBUG: op_eval.go:319:|||||||| +v (println func(xs ...interface{})()) DEBUG: machine.go:1218:|||||||| -o OpEval DEBUG: machine.go:1380:EVAL: (*gnolang.ConstExpr) (const ("i:" string)) DEBUG: op_eval.go:317:||||||| -x (const ("i:" string)) DEBUG: op_eval.go:319:||||||| +v ("i:" string) DEBUG: machine.go:1218:||||||| -o OpEval ```
🛠 PR Checks SummaryAll Automated Checks passed. ✅ Manual Checks (for Reviewers):
Read More🤖 This bot helps streamline PR reviews by verifying automated checks and providing guidance for contributors and reviewers. ✅ Automated Checks (for Contributors):🟢 Maintainers must be able to edit this pull request (more info) ☑️ Contributor Actions:
☑️ Reviewer Actions:
📚 Resources:Debug
|
Codecov ReportAttention: Patch coverage is
📢 Thoughts on this report? Let us know! |
But this makes the visual cue of the pipes on the left useless, as you can't line them up. Could this not go after the pipes, at least? |
Running the gnovm with the debug traces enabled (build tag
debug
) allows to display the details of preprocessing and opcodes operations.This PR adds the caller location in source (file + line) to each trace, allowing to identify the calling context of opcodes, to ease understanding the gnovm behavior.
No change when debug is disabled (the default mode).
Tracing can be activated by:
go run -tags debug ./cmd/gno run args
Before:
After: