Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
VIMでコールツリーを読む
Search
nzzy
July 07, 2018
Programming
850
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
VIMでコールツリーを読む
VIMでコールツリーを読むのは最高!という話
nzzy
July 07, 2018
More Decks by nzzy
See All by nzzy
FOSDEM2017行ってきた
tknozzy
0
310
Other Decks in Programming
See All in Programming
残高管理から台帳サービスへの進化
artoy
0
180
AWSに止められる覚悟してますか?
morizo_1984
2
520
外から家のPCの電源入れたい!をPHPで解決する
kawashimo0
1
120
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
360
wkhtmltopdfの次どうするか問題2026
willnet
2
1.9k
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
160
ジョジョの世界をXRで再現する
mofurune
0
140
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
570
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
200
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
580
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
120
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
360
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
247
13k
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.7k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
320
Balancing Empowerment & Direction
lara
6
1.3k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
Practical Orchestrator
shlominoach
192
12k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Statistics for Hackers
jakevdp
799
230k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Transcript
1 / 14 VIM でコールツリーをコールツリーを読む読むむ nzzy
2 / 14 コールツリー解析とと VIM 設計がわからないプがわからないプログラムのソプログラムのソースコードのソースコードソースコード を理解するのに、理解するのに、コーするのソースコードに、コールツリーがコールツリーが便利というといプログラムのソう 事と、読むのにと、コールツリーが読むのにむのソースコードに VIM が超便利というだったといプログラムのソう
件の紹介をしますのソースコード紹介をします!を理解するのに、します!
3 / 14 コールツリーとは • プログラムにて、関数がどにて、関数がどのよう関数がどのように呼がどのように呼ばれたかを記ばれたかを記記 録したもの。したもの。 test.py の例: import
sys def barbar(): ... def bar(): barbar() def foo(): bar() if __name__ == ‘__main__’: foo() コールツリー: foo() bar() barbar()
4 / 14 コールツリーのソースコード使いどころいプログラムのソどころ • ソースコード読んでも動作が読んでも動作がわんでも動作がわかりにくいがわかりにくい場合、対場合、関数がどのよう対 象のプログラムをのプログラムにて、関数がどを記実際に動作させて、に動作がわかりにくいさせて、関数がどのようコールツリー を記記録したもの。し、関数がどのよう動作がわかりにくいを記掴む。む。 動作がわかりにくいがわかりにくい場合、対例: ・〜ド読んでも動作がリブンでかつ独自アーでかつ独自アーキテク独自アーキテクチャアーキテクチャなプログなプログプログ
ラムにて、関数がど ・抽象のプログラムを化の塊なプログラの塊なプログラムなプログプログラムにて、関数がど ・その他、関数がどのよう設計ポリシーが全くポリシーが全く不明なプログく不明なプログラムなプログプログラムにて、関数がど (笑)己の知識不笑)己の知識不足も含の知識不足も含む(笑)も含む(笑)む(笑)己の知識不笑)
5 / 14 コールツリーの理解の仕方のコ理解の仕方のコツの理解の仕方のコ仕方のコツの理解の仕方のココツ コールツリーの上位だけでプログラだけでプログラムにて、関数がどの流れの概要れの概要 を記つ独自アーキテクかみ、関数がどのよう詳細を知りたい場所を記知りたい場合、対場所の呼び出しをたの呼ばれたかを記び出しをたどっ出しをたどっしを記たどっ て、関数がどのよう詳細を知りたい場所を記把握していくのがコしてい場合、対くのがコツ。 コールツリー 上位だけでプログラの流れの概要れ: foo()
bar() barbar() exit() bar() の内部のの コールの流れの概要れ: hoge() fuga() fugafuga() 概要を記掴む。む 詳細を知りたい場所を記読んでも動作がわんでい場合、対く
6 / 14 コールツリーを実際に見てみる実際に見てみるとに見てみると見てみるとてみると 実は理屈はわかっは理屈はわかって理屈はわかってもは理屈はわかってわかっても ... 現実は理屈はわかっに出力されるコールされるコール ツリーを理解するのに、見ると、量が膨大ると、コールツリーが量が膨大すぎて概が膨大すぎて概要把握すぎて概要把握もままなもままな らないプログラムのソ事と、読むのにがわかると思います。いプログラムのソます。 なにかツールを理解するのに、使いどころえばなんとかなるかも?
そうだ! VIM があるじゃないプログラムのソか!
7 / 14 VIM fold 機能を使うを理解するのに、使いどころう • “{{{“ 〜” }}}”
で囲まれたブロッ囲まれたブロックまれたブロックを、畳んだり、を理解するのに、、コールツリーが畳んだり、開いんだり、コールツリーが開いいプログラムのソ たりで囲まれたブロッきる機能を使う。 set foldmethod=marker で囲まれたブロッ発動。 main() /* {{{ */ { hoge() fuga() } /*}}}*/ hoge() /*{{{ */ { hogehoge() }/*}}}*/ :set foldmethod=marker +main() +hoge() “zo” を理解するのに、押すと、カーソルすと、コールツリーがカーソル のソースコードある畳んだり、開いまれた行が開く。が開いく。 “zc” を理解するのに、押すと、カーソルすと、コールツリーがカーソル のソースコードある行が開く。が畳んだり、開いまれる
8 / 14 VIM fold 機能を使う(続き)を実際に見てみる使う(続き)う(続き)続き)き) じつは理屈はわかって VIM のソースコード fold
機能を使うは理屈はわかって、コールツリーが検索と、折り畳みをと、コールツリーが折り畳みを開く機り畳んだり、開いみを理解するのに、開いく機能を使う が同時に使える。これに使いどころえる。これが超便利という。 +main() +hoge() +fuga() /foo +main() hoge() /*{{{*/ { foo() } /*}}}*/ fuga() /*{{{*/ { foo() } /*}}}*/ “/ 正規表現”はは理屈はわかって VIM のソースコード検索と、折り畳みを で囲まれたブロッあるが、コールツリーが発見ると、量が膨大された文字列 が折り畳みを開く機り畳んだり、開いまれた場所にあっにあっ た場合は、含まれる折は理屈はわかって、コールツリーが含まれる折り畳まれる折り畳みを開く機り畳んだり、開い みが開いき、コールツリーが表示される。される。
9 / 14 VIM は大きなファイル大きなファイルにきなファイルにも強ファイルに見てみるとも強い強いい コールツリーは理屈はわかって、コールツリーが巨大すぎて概要把握なファイル(数百数百 MBytes 以上 ) になることが多い。いプログラムのソ。
VIM は理屈はわかって、コールツリーが 500MBytes のソースコードテキストファイルも、コールツリーが昨今ののソースコード ノート PC ぐらいプログラムのソのソースコードリソースがあれば、コールツリーがサクを、畳んだり、サクを、畳んだり、開いいプログラムのソて閲 覧が可能!が可能を使う! SSD と数 GBytes のソースコードメモリがあれば十分!
10 / 14 VIM のソースコード Goto File 機能を使うも便利という VIM は理屈はわかって、コールツリーがカーソル下にある一連の文にある一連の文字列と行番のソースコード文字列と行が開く。番号をみを理解するのに、み
て、コールツリーがファイルを理解するのに、オープンし、該当の行番し、コールツリーが該当の行番号へジャのソースコード行が開く。番号をみへジャンプすジャンし、該当の行番プす る Goto File といプログラムのソう機能を使うがある。これもコールツリー 読むのにみに最高! 具体例: VIM にて、コールツリーが /usr/lib/python3/dist-packages/scrapy/ cmdline.py:98 といプログラムのソう行が開く。にカーソルを理解するのに、合は、含まれる折わせ、コールツリーが”は <Ctrl-w>Ctrl-w>gF”>gF”gF” する と、コールツリーが cmdline.py がタブで囲まれたブロッ開いき、コールツリーが 93 行が開く。目にカーソルにカーソル が飛ぶ。ぶ。
11 / 14 tinycalltrace といプログラムのソうわけで囲まれたブロッ、コールツリーが VIM と相性の良いコールツのソースコード良いコールツリーいプログラムのソコールツリー生成を行うを理解するのに、行が開く。う python3 向けのトレーサをけのソースコードトレーサを理解するのに、作ってって pipy
に公開いしてみ た。 使いどころいプログラムのソ方: pip install tinycalltrace 解するのに、コー析したいプログラしたいプログラムのソプログラムのソースコード中にて:にて: from tinycalltrace import TinyCallTrace if __name__ == ‘__main__’: TinyCallTrace() として、コールツリーが python3 で囲まれたブロップログラムのソースコードを理解するのに、実は理屈はわかっ行が開く。するだけ。
12 / 14 tinycalltrace (数百つづき) 実は理屈はわかっ行が開く。すると、コールツリーが trace-0xXXXXXXX.txt (XXXXX は理屈はわかってス レッド
ID を理解するのに、 16 進数にしたものソースコード)が、コールツリーがカレンし、該当の行番トディレクを、畳んだり、ト リに生成を行うされる。これが得られたコールツられたコールツリー。 あとは理屈はわかって、コールツリーが vim trace-0xXXXXXX.txt して、コールツリーが set foldmethod=marker すれば OK! あとは理屈はわかって、コールツリーが適当の行番号へジャに”は zo”,”zc”,”<Ctrl-w>CTRL- w>gF”>gF”gF”,”/ 探したい文字列”したいプログラムのソ文字列”はとかしてみてね! きっと便利というさがわかる!
13 / 14 trace-0xXXXXX.txt フォーマットは理屈はわかって次のとおり。のソースコードとおり。 • ->gF”run: /usr/lib/python3.6/threading.py:853 from /usr/lib/python3.6/threading.py:916
{{{ 呼び出された関数び出された関数名出された関数名 関数のソースコード定義のあるのソースコードある ソースのソースコード箇所にあっ 関数を理解するのに、呼び出された関数び出された関数名出した ソースのソースコード箇所にあっ
14 / 14 おわりに コールツリーと、コールツリーが VIM のソースコード組み合わせは最高み合は、含まれる折わせは理屈はわかって最高 で囲まれたブロッす!大すぎて概要把握きなプログラムのソースコードのソースコードソース解するのに、コー析したいプログラに使いどころっ てみることを理解するのに、是非おすすめ!おすすめ!