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
Gunosy.go#3 debug
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
y_matsuwitter
June 27, 2014
Programming
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Gunosy.go#3 debug
debugパッケージの資料になります。
y_matsuwitter
June 27, 2014
More Decks by y_matsuwitter
See All by y_matsuwitter
LLMと共に進化するプロセスを目指して
ymatsuwitter
13
4.2k
Building Products in the LLM Era
ymatsuwitter
11
13k
Product Utilization of Large Language Models Starting Today
ymatsuwitter
3
3.4k
経営・意思・エンジニアリング
ymatsuwitter
23
22k
LLM in 2023 and 2024
ymatsuwitter
8
6.3k
Turbulent Technological Changes and Career Strategies
ymatsuwitter
2
3.2k
LLM in toB Service and Its UX
ymatsuwitter
7
12k
Agent and small LLM validation
ymatsuwitter
7
3.1k
Information management for a culture of speed: The story of Notion and LayerX
ymatsuwitter
4
11k
Other Decks in Programming
See All in Programming
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
140
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
170
Claspは野良GASの夢をみるか
takter00
0
190
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
550
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
160
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.2k
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6k
The NotImplementedError Problem in Ruby
koic
1
790
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
770
Inside Stream API
skrb
1
710
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
21
6.6k
スマートグラスで並列バイブコーディング
hyshu
0
140
Featured
See All Featured
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.1k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
160
Site-Speed That Sticks
csswizardry
13
1.2k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
560
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.3k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
290
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
410
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Faster Mobile Websites
deanohume
310
31k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
410
Transcript
EFCVH !Z@NBUTVXJUUFS
EFCVHʹ͍ͭͯ w HPMBOHͷόΠφϦϑΝΠϧͷEFCVHʹඞཁͳπʔ ϧ܈ w ΦϒδΣΫτϑΝΠϧͷύʔεͳͲͷૢ࡞Λߦ͏
ΦϒδΣΫτϑΝΠϧ w ཁHPCVJMEͰग़དྷ্͕Δ࣮ߦϑΝΠϧ w ϓϥοτϑΥʔϜ͝ͱʹ෦ͷ༷͕ҟͳΔ w (P֤ڥʹ߹Θͤͯ$SPTT$PNQJMFՄೳ
ҙ w .BDͰΫϩείϯύΠϧՄೳͳJOTUBMM͢Δͱ͖ CSFXJOTUBMMHPDSPTTDPNQJMFBMM ͰJOTUBMM͍ͯͩ͘͠͞
(PͰѻ͑Δ࣮ߦϑΥʔϚοτ w &-'ʜओʹ6OJYܥ w .BDI0ʜओʹ.BD049 w 1&ʜओʹ8JOEPXT w 1MBOʜ(PWΑΓαϙʔτɺ6OJYޙܧ
ڞ௨༷UZQF'JMF UZQF'JMF GVOD/FX'JMF SJP3FBEFS"U 'JMF FSSPS GVOD0QFO OBNFTUSJOH
'JMF FSSPS GVOD G 'JMF $MPTF FSSPS GVOD G 'JMF %8"3' EXBSG%BUB FSSPS GVOD G 'JMF %ZO4USJOH UBH%ZO5BH <>TUSJOH FSSPS GVOD G 'JMF *NQPSUFE-JCSBSJFT <>TUSJOH FSSPS GVOD G 'JMF *NQPSUFE4ZNCPMT <>*NQPSUFE4ZNCPM FSSPS GVOD G 'JMF 4FDUJPO OBNFTUSJOH 4FDUJPO GVOD G 'JMF 4FDUJPO#Z5ZQF UZQ4FDUJPO5ZQF 4FDUJPO GVOD G 'JMF 4ZNCPMT <>4ZNCPM FSSPS
EFCVHFMG w 6OJY͚࣮ߦϑΝΠϧ w ༷ͳͲ IUUQDBTQBSIB[ZNPPOKQ0QFO#4% BOOFYFMGIUNM
EFCVHNBDIP w .BDͷ࣮ߦϑΝΠϧܗࣜ w 0CKFDUJWF$ॻ͘ਓΑ͘ग़ձ͏ w όάͰ্ख͘ಡΊͳ͔ͬͨΓ͢Δʜ
EFCVHQF w 8JOEPXT͚࣮ߦϑΝΠϧܗࣜ
EFCVHQMBO w QMBO͚όΠφϦͷ3FBEFS w 1MBOͱɺࢄίϯϐϡʔςΟϯάΛࢦͨ͠ 6OJYWͷޙܧ04ʢΒ͍͠ʣ
EFCVHEXBSG w ܕใͳͲͷ༷ʑͳσόοάใΛؚΉΦϒδΣ ΫτϑΝΠϧ w ֤࣮ߦϑΝΠϧʹڞ௨ͯ͠อଘ͞Ε͍ͯΔ w &-'ͱ͍͏໊લʹର߅ͨ͠Β͍͠
ৄ͘͠ w EXBSG IUUQEXBSGTUEPSHEPDEXBSGQEG
EFCVHHPTZN w (PͷTZNCPM-JOFOVNCFSςʔϒϧͷ ΞΫηεΛఏڙ w ֤छ࣮ߦϑΝΠϧΛಡΈࠐΈɺγϯϘϧͱ-*/& ςʔϒϧΛ༻ҙ w ͦͷޙ5BCMFΦϒδΣΫτʹมɺղੳ
ͬͯΈΑ͏ w ίϯύΠϧࡁΈͷ࣮ߦϑΝΠϧ͔Βఆٛ͞ΕͯΔ શͯͷؔͱͦͷҾΛදࣔͯ͠ΈΑ͏
package main ! import ( "debug/elf" "debug/gosym" "fmt" "log" "os"
)
func parse(file string, f *elf.File) *gosym.Table { sec := f.Section(".gosymtab")
symdat, err := sec.Data() defer f.Close() if err != nil { log.Fatalf("reading %s gosymtab: %v", file, err) } pclndat, err := f.Section(".gopclntab").Data() if err != nil { log.Fatalf("reading %s gopclntab: %v", file, err) } ! pcln := gosym.NewLineTable(pclndat, f.Section(".text").Addr) tab, err := gosym.NewTable(symdat, pcln) if err != nil { log.Fatalf("parsing %s gosymtab: %v", file, err) } ! return tab } &-'ܗ͔ࣜΒ(P ͷγϯϘϧΛ୳͢ -JOFUBCMF Λ୳͢ HPTZN5BCMF Λ༻ҙ͢Δ
func main() { fn := os.Args[1] f, err := elf.Open(os.Args[1])
if err != nil { log.Fatal(err) } table := parse(fn, f) ! //func_ := table.LookupFunc("os.Open") ! for _, f := range table.Funcs { fmt.Println(f.Name) for _, p := range f.Params { fmt.Println("\t" + p.Name) } } } -PPLVQ'VOD Λࢀߟʹͨ͠ } ಛఆͷ'VOD Λ୳͢
࣮ߦ݁Ռൈਮ UFYU NBJOQBSTF NBJOdBOPO NBJOG NBJOpMF NBJONBJO NBJOJOJU UZQFIBTI<>JOUFSGBDF\^ NBJOQ
NBJOT NBJOI UZQFFR<>JOUFSGBDF\^ NBJOR NBJOQ NBJOT NBJOFR ࠓճ࡞ͨ͠ ؔ ҎԼ(Pͷ ඪ४͕ฒͿ
ࢀߟ w NFUIBO͞Μͷϒϩά w ͜ͷลͷιʔεΛಡΉͱ͍͍͔͠Εͳ͍ w IUUQHPMBOHPSHTSDQLHEFCVHHPTZN QDMOUBCHP w IUUQHPMBOHPSHTSDQLHEFCVHHPTZN
TZNUBCHP