René's URL Explorer Experiment


Title: Goのデバッグ用ロガーの開発を通して得た デバッグとgoパッケージに関する知見/Knowledge by given implementation of logger for debug - Speaker Deck

Open Graph Title: Goのデバッグ用ロガーの開発を通して得た デバッグとgoパッケージに関する知見/Knowledge by given implementation of logger for debug

X Title: Goのデバッグ用ロガーの開発を通して得た デバッグとgoパッケージに関する知見/Knowledge by given implementation of logger for debug

Description: [Elevator Pitch] Goでデバッグをする場合, 基本的にはDelve, GDB, ロギングの3択になります. DelveやGDBによるデバッグは便利ですが複数の変数情報を高速に得ることは困難であり, この用途にはロギングが適しています. しかし, デバッグ用に追加したロギング用のコー…

X Description: [Elevator Pitch] Goでデバッグをする場合, 基本的にはDelve, GDB, ロギングの3択になります. DelveやGDBによるデバッグは便利ですが複数の変数情報を高速に得ることは困難であり, この用途にはロギングが適しています. しかし, デバッグ用に追加したロギング用のコー…

Opengraph URL: https://speakerdeck.com/task4233/knowledge-by-given-implementation-of-logger-for-debug

X: @speakerdeck

direct link

Domain: speakerdeck.com


Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"PresentationDigitalDocument","name":"Goのデバッグ用ロガーの開発を通して得た デバッグとgoパッケージに関する知見/Knowledge by given implementation of logger for debug","description":"[Elevator Pitch]\r\n\r\nGoでデバッグをする場合, 基本的にはDelve, GDB, ロギングの3択になります. DelveやGDBによるデバッグは便利ですが複数の変数情報を高速に得ることは困難であり, この用途にはロギングが適しています. しかし, デバッグ用に追加したロギング用のコードを消し忘れ, 実行速度の低下や業務用のコードにおける機密情報のログ出力等の問題を引き起こす可能性があります. これらの問題に対処するべく, 私はGoの静的解析および動的解析によって変数情報等を表示可能で, コミット時に自動的に削除されるデバッグ用のロガーdlを開発しました. 本セッションでは, 前述したGoにおける3種類のデバッグ方法の利点および欠点ならびにdlの開発を通して得たgo/ast等のgoパッケージに関する知見をご紹介します.\r\n\r\n\r\n\r\n[Main Description]\r\n\r\n開発において, 想定外の挙動をした際にデバッグをした経験がある方は多いのではないでしょうか? Goでデバッグをする場合, 基本的にはDelve[1], GDB[2], ロギングの3択になります. Delve[1]はサードパーティー製のGo用デバッガであり, 実行時の変数やスタック情報の表示や上書き, goroutineの情報取得等ができます. また, リモードデバッグを有効にすることで, VS CodeやGoLandなどのエディタやIDEに組み込んでGUI上でデバッグすることもできるため, 開発時に重宝します. GDB[2]はDelve[1]と似たデバッガで, gef[5]やpeda[4], pwndbg[6]等のGDBスクリプトにより, 低レイヤを対象としたデバッグを円滑に行うことができます. しかし, Go Blogの記事[3]に記載されているように, Goプログラムの構造を理解していないため誤った結果を表示する場合もあります. また, Delve[1]やGDB[2]はある1点の状態を詳しく得ることは得意ですが, 複数の変数情報等をまとめて高速に得ることは不得手です. したがって, 手軽に複数の変数情報等をまとめて高速に得る用途にはロギングが適しています.\r\n\r\n\r\n\r\nGoのロギングには, builtinパッケージのpanic, print, println, fmtパッケージやlogパッケージの各種関数およびメソッド, サードパーティー製のglog[7], Logrus[8], zap[9]等のロガーが利用できます. また, logr[10]が提供するinterfaceを満たすロガーを利用することで, それぞれのロガーを手軽に切り替えることもできます. これにより, Delve[1]やGDB[2]と違い, 複数の変数情報等をまとめて高速に得ることができます. しかし, デバッグ用に追加したロギング用のコードを消し忘れ, 実行速度の低下や業務用のコードにおける機密情報のログ出力等の問題を引き起こす可能性があります. 実際に, 私もインターンシップ先のリポジトリに対して余分なロギング用のコードを追加し, レビュー漏れで本番コードに紛れ込んでしまった経験があります.\r\n\r\n\r\n\r\nそこで, 私はGoの静的解析と動的解析によって変数情報等を表示でき,コミット時に自動的に削除されるデバッグ用のロガーdl( https://github.com/task4233/dl )を開発しました. Design Docsはこちら( http://bit.ly/3XGdtyF )です. dlは変数とその型情報, 変数が利用されているコードの行数を表示する機能とコミット時に自動的に削除される機能を提供します. これらの機能は, Goのgo/token, go/parser, go/astパッケージ等を用いた静的解析やruntimeパッケージを用いた動的解析を活用することで実現しています. また, dlは前述したlogrのinterfaceを満たしているロガーであればラップすることができ, 既存のロガーを変更することなく容易に導入することができます. 私が調査した中では, これらの機能を全て備えたロガーは他に存在しませんでした(2023/01/30現在).\r\n\r\n\r\n\r\n本セッションでは, 前述したGoにおける3種類のデバッグ方法の利点および欠点ならびにdlの開発を通して得たgo/ast等のgoパッケージに関する知見をご紹介します. 過去のGo ConferenceでGDB[2]に関する講演[11]がありましたが, これとは異なる切り口の内容なので差分はあると考えています.\r\n\r\n\r\n\r\n[1] go-delve/delve: https://github.com/go-delve/delve \r\n\r\n[2] GDB: The GNU Project Debugger: https://www.sourceware.org/gdb/ \r\n\r\n[3] Debugging Go Code with GDB: https://go.dev/doc/gdb \r\n\r\n[4] hugsy/gef: https://github.com/hugsy/gef \r\n\r\n[5] longld/peda: https://github.com/longld/peda \r\n\r\n[6] pwndbg/pwndbg: https://github.com/pwndbg/pwndbg \r\n\r\n[7] golang/glog: https://github.com/golang/glog \r\n\r\n[8] Sirupsen/logrus: https://github.com/Sirupsen/logrus \r\n\r\n[9] uber-go/zap: https://github.com/uber-go/zap/ \r\n\r\n[10] go-logr/logr: https://github.com/go-logr/logr \r\n\r\n[11] Debugging Go Code with GDB:https://speakerdeck.com/kaneshin/debugging-go-code-with-gdb","url":"https://speakerdeck.com/task4233/knowledge-by-given-implementation-of-logger-for-debug","encodingFormat":"application/pdf","author":{"@type":"Person","name":"task4233","url":"https://speakerdeck.com/task4233"},"thumbnailUrl":"https://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/preview_slide_0.jpg?25858105","educationalUse":"presentation","inLanguage":"ja","associatedMedia":{"@type":"MediaObject","contentUrl":"https://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/gocon2023_logger_for_debug.pdf","encodingFormat":"application/pdf"},"datePublished":"2023-06-02"}

csrf-paramauthenticity_token
csrf-tokenTjsvqKg3GdbD3Bzp5pXL3oQeqSTzdU03NSxTBPT99e4q5BJMAtUnNt6QogOXvHT8M2QPuoXfgQpKZa_nsnqYCg
og:site_nameSpeaker Deck
og:typewebsite
og:authortask4233
og:imagehttps://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_0.jpg?25858105
twitter:cardsummary_large_image
twitter:creator@speakerdeck
twitter:image:srchttps://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_0.jpg?25858105
twitter:label1Deck by
twitter:data1task4233
stats-owner_id788682
stats-talk_id1033657
stats-view_typetalk

Links:

Upgrade to Pro — share decks privately, control downloads, hide ads and more … https://speakerdeck.com/pro?utm_campaign=upgrade_to_pro&utm_medium=web&utm_source=talk_show
Speaker Deck https://speakerdeck.com/
Features https://speakerdeck.com/features
Speaker Deck PRO https://speakerdeck.com/pro?utm_campaign=speakerdeck_pro&utm_medium=web&utm_source=nav_unauthenticated
Sign in https://speakerdeck.com/signin
Sign up for free https://speakerdeck.com/signup
https://speakerdeck.com/
task4233 https://speakerdeck.com/task4233
Technology https://speakerdeck.com/c/technology
0 https://speakerdeck.com/signin?return_to=%2Ftask4233%2Fknowledge-by-given-implementation-of-logger-for-debug
https://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/gocon2023_logger_for_debug.pdf
https://github.com/task4233/dlhttps://github.com/task4233/dl
http://bit.ly/3XGdtyFhttp://bit.ly/3XGdtyF
https://github.com/go-delve/delvehttps://github.com/go-delve/delve
https://www.sourceware.org/gdb/https://www.sourceware.org/gdb/
https://go.dev/doc/gdbhttps://go.dev/doc/gdb
https://github.com/hugsy/gefhttps://github.com/hugsy/gef
https://github.com/longld/pedahttps://github.com/longld/peda
https://github.com/pwndbg/pwndbghttps://github.com/pwndbg/pwndbg
https://github.com/golang/gloghttps://github.com/golang/glog
https://github.com/Sirupsen/logrushttps://github.com/Sirupsen/logrus
https://github.com/uber-go/zap/https://github.com/uber-go/zap/
https://github.com/go-logr/logrhttps://github.com/go-logr/logr
https://speakerdeck.com/kaneshin/debugging-go-code-with-gdbhttps://speakerdeck.com/kaneshin/debugging-go-code-with-gdb
task4233https://speakerdeck.com/task4233
Tweet https://x.com/intent/tweet?url=https://speakerdeck.com/task4233/knowledge-by-given-implementation-of-logger-for-debug&text=Go%E3%81%AE%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E7%94%A8%E3%83%AD%E3%82%AC%E3%83%BC%E3%81%AE%E9%96%8B%E7%99%BA%E3%82%92%E9%80%9A%E3%81%97%E3%81%A6%E5%BE%97%E3%81%9F+%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%81%A8go%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E7%9F%A5%E8%A6%8B%2FKnowledge+by+given+implementation+of+logger+for+debug
See All by task4233 https://speakerdeck.com/task4233
pprof vs runtime/trace (FlightRecorder) https://speakerdeck.com/task4233/trace-flightrecorder
task4233 https://speakerdeck.com/task4233
embedパッケージを深掘りする / Deep Dive into embed Package in Go https://speakerdeck.com/task4233/deep-dive-into-embed-package-in-go
task4233 https://speakerdeck.com/task4233
GC24 Recap: Interface Internals https://speakerdeck.com/task4233/recap-interface-internals
task4233 https://speakerdeck.com/task4233
GopherCon 2024 Recap: Exploring the Go Compiler: Adding a "four" loop / 構文追加で学ぶGoコンパイラの処理 https://speakerdeck.com/task4233/recap-exploring-the-go-compiler
task4233 https://speakerdeck.com/task4233
入門XSS / Introduction of XSS https://speakerdeck.com/task4233/introduction-of-xss
task4233 https://speakerdeck.com/task4233
脆弱性スキャナのOWASP ZAPを コードベースで扱ってみる / OWASP ZAP on a code base https://speakerdeck.com/task4233/owasp-zap-on-a-code-base
task4233 https://speakerdeck.com/task4233
誘導を読み取って1ステップ上の問題を解けるようになろう/Tips for Solving CTF with Reading Leads https://speakerdeck.com/task4233/tips-for-solving-ctf-with-reading-leads
task4233 https://speakerdeck.com/task4233
JavaScriptはなぜシングルスレッドでも非同期処理ができるのか/Why Can JavaSctipt Invoke Asynchronous in Single Thread? https://speakerdeck.com/task4233/why-can-javasctipt-invoke-asynchronous-in-single-thread
task4233 https://speakerdeck.com/task4233
入門gRPC / Introduction of gRPC https://speakerdeck.com/task4233/introduction-of-grpc
task4233 https://speakerdeck.com/task4233
See All in Technology https://speakerdeck.com/c/technology
登壇駆動学習のすすめ — CfPのネタの見つけ方と書くときに意識していること https://speakerdeck.com/bicstone/speaking-driven-development
bicstone https://speakerdeck.com/bicstone
22nd ACRi Webinar - NTT Kawahara-san's slide https://speakerdeck.com/nao_sumikawa/22nd-acri-webinar-ntt-kawahara-sans-slide
nao_sumikawa https://speakerdeck.com/nao_sumikawa
OWASP Top 10:2025 リリースと 少しの日本語化にまつわる裏話 https://speakerdeck.com/okdt/owasp-top-10-2025-and-backstories
okdt https://speakerdeck.com/okdt
PROhttps://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge
StrandsとNeptuneを使ってナレッジグラフを構築する https://speakerdeck.com/yakumo/strandstoneptunewoshi-tutenaretuzigurahuwogou-zhu-suru
yakumo https://speakerdeck.com/yakumo
チーム開発の基礎_研究を事業につなげるために https://speakerdeck.com/cyberagentdevelopers/fundamentals-of-team-development
cyberagentdevelopers https://speakerdeck.com/cyberagentdevelopers
PROhttps://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge
デザインもAIに任せる!iPhoneで行うiOS開発 https://speakerdeck.com/zozotech/ai-driven-ios-development-on-iphone
zozotech https://speakerdeck.com/zozotech
PROhttps://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge
LiDARが変えたARの"距離感" https://speakerdeck.com/zozotech/lidar-ar-distance
zozotech https://speakerdeck.com/zozotech
PROhttps://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge
Oracle Database@Google Cloud:サービス概要のご紹介 https://speakerdeck.com/oracle4engineer/oracle-database-at-google-cloud
oracle4engineer https://speakerdeck.com/oracle4engineer
PROhttps://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge
22nd ACRi Webinar - ChipTip Technology Eric-san's slide https://speakerdeck.com/nao_sumikawa/22nd-acri-webinar-chiptip-technology-eric-sans-slide
nao_sumikawa https://speakerdeck.com/nao_sumikawa
新規事業開発でのAWS活用 https://speakerdeck.com/amixedcolor/xin-gui-shi-ye-kai-fa-denoawshuo-yong
amixedcolor https://speakerdeck.com/amixedcolor
データの整合性を保ちたいだけなんだ https://speakerdeck.com/shoheimitani/foreign-key-checks
shoheimitani https://speakerdeck.com/shoheimitani
AzureでのIaC - Bicep? Terraform? それ早く言ってよ会議 https://speakerdeck.com/torumakabe/azuredenoiac-bicep-terraform-sorezao-kuyan-tuteyohui-yi
torumakabe https://speakerdeck.com/torumakabe
See All Featured https://speakerdeck.com/p/featured
Accessibility Awareness https://speakerdeck.com/sabderemane/accessibility-awareness
sabderemane https://speakerdeck.com/sabderemane
Sam Torres - BigQuery for SEOs https://speakerdeck.com/techseoconnect/sam-torres-bigquery-for-seos
techseoconnect https://speakerdeck.com/techseoconnect
PROhttps://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge
How to Think Like a Performance Engineer https://speakerdeck.com/csswizardry/how-to-think-like-a-performance-engineer
csswizardry https://speakerdeck.com/csswizardry
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End https://speakerdeck.com/smashingmag/responsive-adventures-dirty-tricks-from-the-dark-corners-of-front-end
smashingmag https://speakerdeck.com/smashingmag
GraphQLとの向き合い方2022年版 https://speakerdeck.com/quramy/graphqltofalsexiang-kihe-ifang-2022nian-ban
quramy https://speakerdeck.com/quramy
A brief & incomplete history of 
UX Design for the World Wide Web: 1989–2019 https://speakerdeck.com/jct/a-brief-and-incomplete-history-of-ux-design-for-the-world-wide-web-1989-2019
jct https://speakerdeck.com/jct
Navigating the moral maze — ethical principles for Al-driven product design https://speakerdeck.com/skipperchong/navigating-the-moral-maze
skipperchong https://speakerdeck.com/skipperchong
Visual Storytelling: How to be a Superhuman Communicator https://speakerdeck.com/reverentgeek/visual-storytelling-how-to-be-a-superhuman-communicator
reverentgeek https://speakerdeck.com/reverentgeek
Code Reviewing Like a Champion https://speakerdeck.com/maltzj/code-reviewing-like-a-champion
maltzj https://speakerdeck.com/maltzj
Reflections from 52 weeks, 52 projects https://speakerdeck.com/jeffersonlam/reflections-from-52-weeks-52-projects
jeffersonlam https://speakerdeck.com/jeffersonlam
30 Presentation Tips https://speakerdeck.com/portentint/30-presentation-tips
portentint https://speakerdeck.com/portentint
PROhttps://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge
A Modern Web Designer's Workflow https://speakerdeck.com/chriscoyier/a-modern-web-designers-workflow
chriscoyier https://speakerdeck.com/chriscoyier
Goのデバッグ用ロガーの開発を通して得た デバッグとgoパッケージに関する知見 Go Conference 2023 2023/06/02 Takashi Mima(@task4233)https://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_0.jpg
Takashi Mima(@task4233) 所属 ・株式会社メルカリ(Identity Platform) 興味分野 ・バックエンド  ・Go(Contribution/Go Conference) ・セキュリティhttps://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_1.jpg
Goでデバッグする際に 何を使いますか?👀 3https://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_2.jpg
Delve?GDB?ロギング? 他の何か?🧐 4https://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_3.jpg
本発表で共有する2つのこと 1. Goにおける3種類のデバッグ方法 2. 自作したロガーの開発に用いられているgoパッケージ ・デバッガの詳しい使い方 ・GODEBUG等の環境変数を用いたデバッグ 5 本発表で共有しないことhttps://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_4.jpg
3種類のデバッグ方法 Delve GDB ロギング 👍 ・大半のGoプログラム  のデバッグに利用可能 ・Goに特化しており、  GDBよりも正確な結果  が得られるhttps://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_5.jpg
Delve: Goに特化したサードパーティー製のデバッガ 目標 ・Go用のシンプルでフル機能を備えたデバッグツールの提供 Delveが適する場面 ・ビルドされたGoプログラムをデバッグする場合の大半 ・Goのランタイムやデータ構造、式を理解しているため 実装 ・github.com/go-delve/delve 7https://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_6.jpg
Goクイズ: 次のプログラム実行時に表示されるのは?🤔 package main import "fmt" type T struct{ Nhttps://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_7.jpg
Goクイズ: 次のプログラム実行時に表示されるのは?🤔 package main import "fmt" type T struct{ Nhttps://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_8.jpg
GDB: Goに限らず普遍的に使えるデバッガ 用途 ・プログラム実行中の内部情報の把握 ・クラッシュした際のメモリやスタックの状態の把握 GDBが適する場面 ・Cgoコードやランタイム自体のデバッグをする場合 参考リンク ・https://sourceware.org/git/binutils-gdb.git ・https://go.dev/doc/gdbhttps://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_9.jpg
GDB: 低レイヤのデバッグ 拡張スクリプト ・Go用拡張: go/src/runtime/runtime-gdb.py ・peda: https://github.com/longld/peda ・gef: https://github.com/hugsy/gef 11https://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_10.jpg
ロギング: プログラムの変数等の情報出力 ロギングが適する場面 ・複数の変数情報を手軽にまとめて出力したい場合 利用できるもの ・builtin関数のpanic, print, println ・fmt, log,https://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_11.jpg
3種類のデバッグ方法 Delve GDB ロギング 👍 ・大半のGoプログラム  のデバッグに利用可能 ・Goに特化しており、  GDBよりも正確な結果  が得られるhttps://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_12.jpg
3種類のデバッグ方法 Delve GDB ロギング 👍 ・大半のGoプログラム  のデバッグに利用可能 ・Goに特化しており、  GDBよりも正確な結果  が得られるhttps://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_13.jpg
こんな経験はありませんか? ・テストがうまく動かない... ・プログラムが謎の挙動をする → ログを仕込む! ・対象変数の値は何?  log.Printf(“%#v”, targetVariable) ・対象変数の型は何?  log.Printf(“%T”,https://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_14.jpg
人はデバッグ時に余計なことを考えたくない ・デバッグ後、ログを仕込んだ場所を忘れがち →コミット時にロギング部分を全て消すロガーを開発すれば  良いのでは?🤔 16https://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_15.jpg
デバッグ用ロガーのdlを開発しました 仕組み ・コミット前後のGit Hooksでロギング部分を削除・復元 ・ロガーの削除・復元はGoの静的解析により実現 実装 ・https://github.com/task4233/dl 紹介記事 ・Git にコミットされない魔法のデバッグ用ロガーを開発https://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_16.jpg
バグらせずにロガー部分を削除する技術 静的解析をする ・プログラムを実行せずにGoのコードを解析すること ・詳しくは tenntennさんの14. 静的解析とコード生成 に 字句解析→構文解析→型チェックの順に行われる ・今回、型情報は必要ないので構文解析のフェーズまで(コード) ・構文解析までするとAST(抽象構文木)が得られるhttps://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_17.jpg
AST(抽象構文木)とは 言語の意味に関係のある情報のみを取り出した木 ・return 1, nil は Return Statements 19 ReturnStmthttps://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_18.jpg
dlで利用されているgoパッケージと用途 20 パッケージ名 用途 該当部分 go/token 字句解析(Go Code→tokens) コード go/parserhttps://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_19.jpg
ASTからロガーの呼び出しを削除するために 言語仕様に沿って呼び出され得る箇所を考える ・ロガーの定義は func Info[T any](v T) (int, error)  →Expressionhttps://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_20.jpg
ASTからロガーの呼び出しを削除するために 該当部分をASTから発見する ・Expression Statementsを見つけたい時は以下のように ・見つけた後に、該当部分を削除する 22https://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_21.jpg
まとめ 3種類のデバッグ方法(Delve, GDB, ロギング) ・得手不得手がある ・目的にあった方法を選択できると良い goパッケージ(go/ast, go/tokenなど) ・静的解析のためのパッケージ ・ASTや型情報等を得ることができるhttps://files.speakerdeck.com/presentations/d9fc81266f564e0db1723274f8509329/slide_22.jpg
SpeakerDeck https://speakerdeck.com/
https://www.facebook.com/speakerdeck
https://x.com/speakerdeck
Programminghttps://speakerdeck.com/c/programming
Technologyhttps://speakerdeck.com/c/technology
Storyboardshttps://speakerdeck.com/c/storyboards
Featured deckshttps://speakerdeck.com/p/featured
Featured speakershttps://speakerdeck.com/s/featured
Storyboard Artistshttps://speakerdeck.com/pro/storyboard-artists
Educatorshttps://speakerdeck.com/educators
Studentshttps://speakerdeck.com/student-pricing
Help Centerhttps://help.speakerdeck.com/
Bloghttps://blog.speakerdeck.com/
Compare Speaker Deckhttps://speakerdeck.com/slideshare-alternative
Advertisinghttps://speakerdeck.com/advertising
Private URLshttps://speakerdeck.com/features/privacy-controls
Password Protectionhttps://speakerdeck.com/features/password-protection
Custom URLShttps://speakerdeck.com/features/custom-urls
Scheduled publishinghttps://speakerdeck.com/features/scheduled-publishing
Remove Brandinghttps://speakerdeck.com/features/remove-branding
Restrict embeddinghttps://speakerdeck.com/features/restrict-embedding
Noteshttps://speakerdeck.com/features/slide-notes
Abouthttps://speakerdeck.com/about
Termshttps://speakerdeck.com/tos
Privacyhttps://speakerdeck.com/privacy
DMCAhttps://speakerdeck.com/dmca
Accessibility Statementhttps://speakerdeck.com/accessibility

Viewport: width=device-width, initial-scale=1, viewport-fit=cover

Robots: max-image-preview:large


URLs of crawlers that visited me.