Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Debugging Code Generation in Go
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
JBD
February 02, 2020
Programming
1.7k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Debugging Code Generation in Go
JBD
February 02, 2020
More Decks by JBD
See All by JBD
eBPF in Microservices Observability at eBPF Day
rakyll
1
2.2k
eBPF in Microservices Observability
rakyll
1
1.8k
OpenTelemetry at AWS
rakyll
1
1.9k
Are you ready for production?
rakyll
8
3k
Servers are doomed to fail
rakyll
3
1.6k
Serverless Containers
rakyll
1
300
Critical Path Analysis
rakyll
0
710
Monitoring and Debugging Containers
rakyll
2
1.2k
CPDD
rakyll
0
4.3k
Other Decks in Programming
See All in Programming
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
270
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
110
Go を使い始めて 2 ヶ月の学び / My first two months with Go
contour_gara
0
420
書籍「プロフェッショナルAI駆動開発」紹介スライド
juntaromatsumoto
0
990
ソフトウェアラスタライザ
fadis
1
790
PyO3 で既存 Python 評価器を Rust core 化する ー wasm-bindgen でブラウザにも配るための設計
kdash
1
470
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
110
「つくるAI」だけではバグは見つからない ~テストに必要な「見つけるAI」を分離させる戦略~
mfunaki
0
230
[KotlinConf Extended South Korea 2026] KotlinConf 2026 발표자 후기
wisemuji
0
100
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
0
380
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
340
ALB ログから Trace を気合で繋げる技術
fohte
7
880
Featured
See All Featured
WENDY [Excerpt]
tessaabrams
12
39k
The untapped power of vector embeddings
frankvandijk
2
1.9k
Side Projects
sachag
455
43k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.9k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
370
Scaling GitHub
holman
464
140k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
The Pragmatic Product Professional
lauravandoore
37
7.4k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
Transcript
Debugging Code Generation in Go Jaana B. Dogan, Google
[email protected]
None
None
@rakyll Who needs this talk? • Developers who want to
debug the compilation. • Reverse engineers, security practitioners, ... • Current or prospective Go contributors. • Anyone who wants to study compilers.
Lexing and parsing Transformations on AST SSA optimizations
main program package main import "fmt" func main() { sum
:= 1 + 1 fmt.Printf("sum: %v\n", sum) }
main program $ go build -x WORK=/var/folders/zq/wgh6df4s6fz2wjwdp5dvzlww005d 21/T/go-build399551378 mkdir -p
$WORK/b001/ cat >$WORK/b001/importcfg.link << 'EOF' # internal packagefile github.com/rakyll/codegen=/Users/jbd/Library/Cach es/go-build/00/00ed60989b390a64bad3cb01d4ec61aae6 d0ea61e3e38fc35052d1ab5b0efe66-d packagefile ...
main program $ go build -n # run dry WORK=/var/folders/zq/wgh6df4s6fz2wjwdp5dvzlww005d
21/T/go-build399551378 mkdir -p $WORK/b001/ cat >$WORK/b001/importcfg.link << 'EOF' # internal packagefile github.com/rakyll/codegen=/Users/jbd/Library/Cach es/go-build/00/00ed60989b390a64bad3cb01d4ec61aae6 d0ea61e3e38fc35052d1ab5b0efe66-d packagefile ...
main program $ go build -a # build without the
cache
main program $ go build -work # don’t delete work
directory WORK=/var/folders/zq/wgh6df4s6fz2wjwdp5dvzlww005d 21/T/go-build444532126
main program $ go list -f {{.GoFiles}} # investigate files
[main.go] $ GOOS=windows go list -f {{.GoFiles}} [main.go main_windows.go] See https://golang.org/pkg/cmd/go/internal/list/ for more.
main program $ go build -gcflags="-S" # print Go assembly
# github.com/rakyll/codegen os.(*File).close STEXT dupok nosplit size=26 args=0x18 locals=0x0 0x0000 00000 (<autogenerated>:1) TEXT os.(*File).close(SB), DUPOK|NOSPLIT|ABIInternal, $0-24 0x0000 00000 (<autogenerated>:1) FUNCDATA$0, gclocals·e6397a44f8e1b6e77d0f200b4fba5269(SB) 0x0000 00000 (<autogenerated>:1) FUNCDATA...
main program $ go tool objdump -s main.main <binary> TEXT
main.main(SB) /Users/jbd/go/src/github.com/rakyll/codegen/main. go main.go:5 0x109adc0 65488b0c2530000000 MOVQ GS:0x30, CX main.go:5 0x109adc9 483b6110 CMPQ 0x10(CX), SP main.go:5 0x109adcd 0f8690000000 JBE 0x109ae63 main.go:5 0x109add3 4883ec68 SUBQ ...
main program $ go tool nm <binary> | grep runtime.walltime
1044b20 T runtime.walltime 1054c50 T runtime.walltime_trampoline
main program $ go build -gcflags="-N" # disable optimizations $
go build -gcflags="-l" # disable inlining $ go build -gcflags="-N -l" # disable both
main program $ GOSSAFUNC=main go build && open ssa.html
main program $ go build -gcflags="-m" # escape analysis $
go build -gcflags="-m=2" # more info
main program $ go build -gcflags="-live" # debug liveness $
go build -gcflags="-live=2" # more info
main program $ go build -gcflags="-bench=bench.out" $ go build -gcflags="-race"
# race detector $ go build -gcflags="-memprofile=profile.out" $ go build -gcflags="-traceprofile=trace.out" # ...
Thanks. Jaana B. Dogan, Google
[email protected]