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
VIMでコールツリーを読む
Search
nzzy
July 07, 2018
Programming
830
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
300
Other Decks in Programming
See All in Programming
Modding RubyKaigi for Myself
yui_knk
0
910
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
660
net-httpのHTTP/2対応について
naruse
0
470
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.6k
3Dシーンの圧縮
fadis
1
690
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
250
Webフレームワークの ベンチマークについて
yusukebe
0
160
AI駆動開発で崩れていくコードベースを立て直す
kyoko_nr_nr
1
450
AIとRubyの静的型付け
ukin0k0
0
560
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
250
CSC307 Lecture 17
javiergs
PRO
0
320
依存関係から依存物へ―Dependencyという言葉の歴史をひも解く
j_lee
0
110
Featured
See All Featured
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
390
The browser strikes back
jonoalderson
0
1.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
330
Done Done
chrislema
186
16k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
720
Building Flexible Design Systems
yeseniaperezcruz
330
40k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
940
Side Projects
sachag
455
43k
The Limits of Empathy - UXLibs8
cassininazir
1
350
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
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 のソースコード組み合わせは最高み合は、含まれる折わせは理屈はわかって最高 で囲まれたブロッす!大すぎて概要把握きなプログラムのソースコードのソースコードソース解するのに、コー析したいプログラに使いどころっ てみることを理解するのに、是非おすすめ!おすすめ!