SlideShare a Scribd company logo
Enviar pesquisa
Carregar
Code Reading at Security and Programming camp 2011
Denunciar
Compartilhar
Hiro Yoshioka
Visiting Professor at Advanced Institute of Industrial Technology em Advanced Institute of Industrial Technology
Seguir
•
5 gostaram
•
1,089 visualizações
1
de
52
Code Reading at Security and Programming camp 2011
•
5 gostaram
•
1,089 visualizações
Denunciar
Compartilhar
Baixar agora
Baixar para ler offline
Source Code Reading at Security and Programming camp 2011 by Hiro Yoshioka
Leia mais
Hiro Yoshioka
Visiting Professor at Advanced Institute of Industrial Technology em Advanced Institute of Industrial Technology
Seguir
Recomendados
20130228 Goノススメ(BPStudy #66) por
20130228 Goノススメ(BPStudy #66)
Yoshifumi Yamaguchi
11.6K visualizações
•
58 slides
進化するArt por
進化するArt
Takuya Matsunaga
21K visualizações
•
33 slides
20130316 プログラミング言語Go por
20130316 プログラミング言語Go
Yoshifumi Yamaguchi
7.5K visualizações
•
38 slides
PECL を数えてみた por
PECL を数えてみた
y-uti
4K visualizações
•
13 slides
20130824 Lightweight Language "Go" @LL matsuri por
20130824 Lightweight Language "Go" @LL matsuri
Yoshifumi Yamaguchi
4.6K visualizações
•
48 slides
JIT のコードを読んでみた por
JIT のコードを読んでみた
y-uti
10.1K visualizações
•
52 slides
Mais conteúdo relacionado
Mais procurados
ECMAScript没proposal追悼式 por
ECMAScript没proposal追悼式
京大 マイコンクラブ
17.2K visualizações
•
121 slides
Kink: プロトタイプベースの俺々 JVM 言語 por
Kink: プロトタイプベースの俺々 JVM 言語
Taku Miyakawa
2.4K visualizações
•
10 slides
Task Spooler を試した por
Task Spooler を試した
y-uti
3.1K visualizações
•
34 slides
第1回勉強会スライド por
第1回勉強会スライド
koturn 0;
2.1K visualizações
•
104 slides
Dalvikバイトコードリファレンスの読み方 改訂版 por
Dalvikバイトコードリファレンスの読み方 改訂版
Takuya Matsunaga
3.7K visualizações
•
28 slides
C++でCプリプロセッサを作ったり速くしたりしたお話 por
C++でCプリプロセッサを作ったり速くしたりしたお話
Kinuko Yasuda
33.5K visualizações
•
28 slides
Mais procurados
(20)
ECMAScript没proposal追悼式 por 京大 マイコンクラブ
ECMAScript没proposal追悼式
京大 マイコンクラブ
•
17.2K visualizações
Kink: プロトタイプベースの俺々 JVM 言語 por Taku Miyakawa
Kink: プロトタイプベースの俺々 JVM 言語
Taku Miyakawa
•
2.4K visualizações
Task Spooler を試した por y-uti
Task Spooler を試した
y-uti
•
3.1K visualizações
第1回勉強会スライド por koturn 0;
第1回勉強会スライド
koturn 0;
•
2.1K visualizações
Dalvikバイトコードリファレンスの読み方 改訂版 por Takuya Matsunaga
Dalvikバイトコードリファレンスの読み方 改訂版
Takuya Matsunaga
•
3.7K visualizações
C++でCプリプロセッサを作ったり速くしたりしたお話 por Kinuko Yasuda
C++でCプリプロセッサを作ったり速くしたりしたお話
Kinuko Yasuda
•
33.5K visualizações
PECL operator で演算子オーバーロード por y-uti
PECL operator で演算子オーバーロード
y-uti
•
1.4K visualizações
Synthesijer jjug 201504_01 por Takefumi MIYOSHI
Synthesijer jjug 201504_01
Takefumi MIYOSHI
•
7.8K visualizações
PHPでマルチスレッド por karky7
PHPでマルチスレッド
karky7
•
307 visualizações
TypeScript 1.0 オーバービュー por Akira Inoue
TypeScript 1.0 オーバービュー
Akira Inoue
•
16.5K visualizações
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた por Yoshio Hanawa
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
Yoshio Hanawa
•
14.5K visualizações
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い por sasezaki
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
sasezaki
•
9.8K visualizações
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで por Masahiro Wakame
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Masahiro Wakame
•
11.4K visualizações
Dive into RTS - another side por Kiwamu Okabe
Dive into RTS - another side
Kiwamu Okabe
•
1.4K visualizações
Richard high performance fuzzing ja por PacSecJP
Richard high performance fuzzing ja
PacSecJP
•
795 visualizações
Vivado hlsのシミュレーションとhlsストリーム por marsee101
Vivado hlsのシミュレーションとhlsストリーム
marsee101
•
5.5K visualizações
PHPの関数実行とその計測 por shinjiigarashi
PHPの関数実行とその計測
shinjiigarashi
•
2.5K visualizações
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る por Masahiro Wakame
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
Masahiro Wakame
•
13.6K visualizações
ROS Tutorial 02 - CIT por Daiki Maekawa
ROS Tutorial 02 - CIT
Daiki Maekawa
•
4.4K visualizações
良い?悪い?コードコメントの書き方 por Shigenori Sagawa
良い?悪い?コードコメントの書き方
Shigenori Sagawa
•
42.6K visualizações
Destaque
VCS - Version Control System at Security and Programming camp 2011 por
VCS - Version Control System at Security and Programming camp 2011
Hiro Yoshioka
931 visualizações
•
26 slides
Version Control System Tutorial バージョン管理システムチュートリアル por
Version Control System Tutorial バージョン管理システムチュートリアル
Computational Materials Science Initiative
2.8K visualizações
•
46 slides
Hacker culture at an internet company. 文明塾, 2014/04/23 por
Hacker culture at an internet company. 文明塾, 2014/04/23
Hiro Yoshioka
3.3K visualizações
•
77 slides
1000 Speakers Conference in English, on December 6th, 2013 por
1000 Speakers Conference in English, on December 6th, 2013
Hiro Yoshioka
2.2K visualizações
•
13 slides
English Book Club at 1000 Speakers Conference in English, 3rd, on Feb 7th, 2014 por
English Book Club at 1000 Speakers Conference in English, 3rd, on Feb 7th, 2014
Hiro Yoshioka
4.5K visualizações
•
8 slides
kernel code reading party on March 28th, 2014 por
kernel code reading party on March 28th, 2014
Hiro Yoshioka
2.6K visualizações
•
15 slides
Destaque
(20)
VCS - Version Control System at Security and Programming camp 2011 por Hiro Yoshioka
VCS - Version Control System at Security and Programming camp 2011
Hiro Yoshioka
•
931 visualizações
Version Control System Tutorial バージョン管理システムチュートリアル por Computational Materials Science Initiative
Version Control System Tutorial バージョン管理システムチュートリアル
Computational Materials Science Initiative
•
2.8K visualizações
Hacker culture at an internet company. 文明塾, 2014/04/23 por Hiro Yoshioka
Hacker culture at an internet company. 文明塾, 2014/04/23
Hiro Yoshioka
•
3.3K visualizações
1000 Speakers Conference in English, on December 6th, 2013 por Hiro Yoshioka
1000 Speakers Conference in English, on December 6th, 2013
Hiro Yoshioka
•
2.2K visualizações
English Book Club at 1000 Speakers Conference in English, 3rd, on Feb 7th, 2014 por Hiro Yoshioka
English Book Club at 1000 Speakers Conference in English, 3rd, on Feb 7th, 2014
Hiro Yoshioka
•
4.5K visualizações
kernel code reading party on March 28th, 2014 por Hiro Yoshioka
kernel code reading party on March 28th, 2014
Hiro Yoshioka
•
2.6K visualizações
Internet and Opensource at Security and Programming camp 2011 por Hiro Yoshioka
Internet and Opensource at Security and Programming camp 2011
Hiro Yoshioka
•
820 visualizações
産業技術大学院大学の2014年度enPiT受講生募集中 #qcontokyo #aiit_enpit por Miho Nagase
産業技術大学院大学の2014年度enPiT受講生募集中 #qcontokyo #aiit_enpit
Miho Nagase
•
3.7K visualizações
Anatomy of Lightning Talks at Rakuten Technology Conference 2014, After Confe... por Hiro Yoshioka
Anatomy of Lightning Talks at Rakuten Technology Conference 2014, After Confe...
Hiro Yoshioka
•
2.6K visualizações
対人関係におけるアルコールの効用 por Akiko Kosaka
対人関係におけるアルコールの効用
Akiko Kosaka
•
4.4K visualizações
1000 speakers conference in English, 2nd, 1/20/2013 por Hiro Yoshioka
1000 speakers conference in English, 2nd, 1/20/2013
Hiro Yoshioka
•
2.1K visualizações
1000 Speakers Conference in English, 5th on April 11th, 2014 #1000eng por Hiro Yoshioka
1000 Speakers Conference in English, 5th on April 11th, 2014 #1000eng
Hiro Yoshioka
•
2.8K visualizações
Introduction to Git and GitHub #git_nyan por Hiro Yoshioka
Introduction to Git and GitHub #git_nyan
Hiro Yoshioka
•
4.2K visualizações
Project Based Learning using by PaaS por Hiro Yoshioka
Project Based Learning using by PaaS
Hiro Yoshioka
•
2K visualizações
Hacker centric culture @devlove 110423 por Hiro Yoshioka
Hacker centric culture @devlove 110423
Hiro Yoshioka
•
4.1K visualizações
Tokaido 53 walk por Hiro Yoshioka
Tokaido 53 walk
Hiro Yoshioka
•
2.3K visualizações
How Changing Mobile Technology Is Changing The Way We Create Economy. por Osaka University
How Changing Mobile Technology Is Changing The Way We Create Economy.
Osaka University
•
2.5K visualizações
Business Application Development Course at AIIT por Hiro Yoshioka
Business Application Development Course at AIIT
Hiro Yoshioka
•
5.1K visualizações
20140725 オープンデータ化の価値 por Tomoaki Watanabe
20140725 オープンデータ化の価値
Tomoaki Watanabe
•
3.8K visualizações
CUI -- How to Analyze History command por Hiro Yoshioka
CUI -- How to Analyze History command
Hiro Yoshioka
•
1.3K visualizações
Similar a Code Reading at Security and Programming camp 2011
Programming camp code reading por
Programming camp code reading
Hiro Yoshioka
2.3K visualizações
•
52 slides
Programming camp 2008, Codereading por
Programming camp 2008, Codereading
Hiro Yoshioka
303 visualizações
•
46 slides
Sourcecode Reading Workshop2010 por
Sourcecode Reading Workshop2010
Hiro Yoshioka
1.1K visualizações
•
52 slides
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば por
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
Hirotaka Kawata
4.3K visualizações
•
47 slides
Programming camp Codereading por
Programming camp Codereading
Hiro Yoshioka
461 visualizações
•
50 slides
Node.jsでブラウザメッセンジャー por
Node.jsでブラウザメッセンジャー
Yahoo!デベロッパーネットワーク
4.2K visualizações
•
63 slides
Similar a Code Reading at Security and Programming camp 2011
(20)
Programming camp code reading por Hiro Yoshioka
Programming camp code reading
Hiro Yoshioka
•
2.3K visualizações
Programming camp 2008, Codereading por Hiro Yoshioka
Programming camp 2008, Codereading
Hiro Yoshioka
•
303 visualizações
Sourcecode Reading Workshop2010 por Hiro Yoshioka
Sourcecode Reading Workshop2010
Hiro Yoshioka
•
1.1K visualizações
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば por Hirotaka Kawata
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
Hirotaka Kawata
•
4.3K visualizações
Programming camp Codereading por Hiro Yoshioka
Programming camp Codereading
Hiro Yoshioka
•
461 visualizações
Node.jsでブラウザメッセンジャー por Yahoo!デベロッパーネットワーク
Node.jsでブラウザメッセンジャー
Yahoo!デベロッパーネットワーク
•
4.2K visualizações
Debug Hacks at Security and Programming camp 2011 por Hiro Yoshioka
Debug Hacks at Security and Programming camp 2011
Hiro Yoshioka
•
1K visualizações
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 por Katsuhiro Morishita
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
Katsuhiro Morishita
•
71.4K visualizações
Goでかんたんソースコードの静的解析 por Takuya Ueda
Goでかんたんソースコードの静的解析
Takuya Ueda
•
6.7K visualizações
2011.09.18 v7から始めるunix まとめ por Makiko Konoshima
2011.09.18 v7から始めるunix まとめ
Makiko Konoshima
•
1.1K visualizações
C・C++用のコードカバレッジツールを自作してみた話 por simotin13 Miyazaki
C・C++用のコードカバレッジツールを自作してみた話
simotin13 Miyazaki
•
507 visualizações
Lisp Tutorial for Pythonista Day 6 por Ransui Iso
Lisp Tutorial for Pythonista Day 6
Ransui Iso
•
1.7K visualizações
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版 por Katsuhiro Morishita
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
Katsuhiro Morishita
•
6.4K visualizações
Terraformで始めるInfrastructure as Code por Takahisa Iwamoto
Terraformで始めるInfrastructure as Code
Takahisa Iwamoto
•
4.8K visualizações
Programming camp 2010 debug hacks por Hiro Yoshioka
Programming camp 2010 debug hacks
Hiro Yoshioka
•
620 visualizações
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49 por shoma h
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
shoma h
•
3.9K visualizações
DLR言語によるSilverlightプログラミング por terurou
DLR言語によるSilverlightプログラミング
terurou
•
1.1K visualizações
TypeScriptへの入口 por Sunao Tomita
TypeScriptへの入口
Sunao Tomita
•
22.2K visualizações
2017年11月02日「radare2」トーク/ワークショップAVTokyo 2017 por unixfreaxjp
2017年11月02日「radare2」トーク/ワークショップAVTokyo 2017
unixfreaxjp
•
2.5K visualizações
Getting Started GraalVM (再アップロード) por tamtam180
Getting Started GraalVM (再アップロード)
tamtam180
•
504 visualizações
Mais de Hiro Yoshioka
Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活 por
Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
Hiro Yoshioka
2.3K visualizações
•
51 slides
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」 por
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
Hiro Yoshioka
1K visualizações
•
50 slides
不揮発性メモリ(NVM)とはなにか por
不揮発性メモリ(NVM)とはなにか
Hiro Yoshioka
1K visualizações
•
22 slides
続・人生100年時代の学び方 por
続・人生100年時代の学び方
Hiro Yoshioka
1.6K visualizações
•
53 slides
人生100年時代における学び方 定年後の学生生活 por
人生100年時代における学び方 定年後の学生生活
Hiro Yoshioka
425 visualizações
•
47 slides
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten... por
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
Hiro Yoshioka
194 visualizações
•
24 slides
Mais de Hiro Yoshioka
(20)
Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活 por Hiro Yoshioka
Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
Hiro Yoshioka
•
2.3K visualizações
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」 por Hiro Yoshioka
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
Hiro Yoshioka
•
1K visualizações
不揮発性メモリ(NVM)とはなにか por Hiro Yoshioka
不揮発性メモリ(NVM)とはなにか
Hiro Yoshioka
•
1K visualizações
続・人生100年時代の学び方 por Hiro Yoshioka
続・人生100年時代の学び方
Hiro Yoshioka
•
1.6K visualizações
人生100年時代における学び方 定年後の学生生活 por Hiro Yoshioka
人生100年時代における学び方 定年後の学生生活
Hiro Yoshioka
•
425 visualizações
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten... por Hiro Yoshioka
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
Hiro Yoshioka
•
194 visualizações
人生100年時代の学び方、脳には可塑性がある por Hiro Yoshioka
人生100年時代の学び方、脳には可塑性がある
Hiro Yoshioka
•
535 visualizações
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7 por Hiro Yoshioka
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
Hiro Yoshioka
•
10K visualizações
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演 por Hiro Yoshioka
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
Hiro Yoshioka
•
967 visualizações
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】 por Hiro Yoshioka
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
Hiro Yoshioka
•
2.7K visualizações
未経験プログラマがコボルコンパイラを作った話 #compiler_study por Hiro Yoshioka
未経験プログラマがコボルコンパイラを作った話 #compiler_study
Hiro Yoshioka
•
7K visualizações
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12 por Hiro Yoshioka
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
Hiro Yoshioka
•
5K visualizações
海外から見た東京 〜人生100年時代の働き方〜 #efsta56 por Hiro Yoshioka
海外から見た東京 〜人生100年時代の働き方〜 #efsta56
Hiro Yoshioka
•
4.7K visualizações
理科系の作文技術 por Hiro Yoshioka
理科系の作文技術
Hiro Yoshioka
•
2K visualizações
Agile Software Development advanced course (PBL) at AIIT, 2015 por Hiro Yoshioka
Agile Software Development advanced course (PBL) at AIIT, 2015
Hiro Yoshioka
•
7.6K visualizações
質問される力 #TechGirls por Hiro Yoshioka
質問される力 #TechGirls
Hiro Yoshioka
•
1.7K visualizações
Oracle vs Google API 著作権裁判を考える por Hiro Yoshioka
Oracle vs Google API 著作権裁判を考える
Hiro Yoshioka
•
1.4K visualizações
Using oss at an internet company and hacker culture por Hiro Yoshioka
Using oss at an internet company and hacker culture
Hiro Yoshioka
•
1.4K visualizações
Be Hacker por Hiro Yoshioka
Be Hacker
Hiro Yoshioka
•
1.4K visualizações
IT勉強会 Anatomy of IT Study groups, seminars, conferences in Japan por Hiro Yoshioka
IT勉強会 Anatomy of IT Study groups, seminars, conferences in Japan
Hiro Yoshioka
•
1.5K visualizações
Code Reading at Security and Programming camp 2011
1.
セキュリティ&プログラミング
キャンプ2011 ソースコードの読み方 よしおかひろたか 2011年8月11日
2.
講師紹介 ●
よしおかひろたか、Debug Hacks著者、カーネル 読書会主宰、YLUG(横浜Linux Users Group)、勉 強会勉強会 ● 未来のいつか/hyoshioの日記 http://d.hatena.ne.jp/hyoshiok ● hyoshiok@gmail.com ● http://twitter.com/hyoshiok 2
3.
お題 ●
ソースコードの読み方 3
4.
プログラマに必要な3つの
スキル ● ソースコードを読むチカラ ● デバッグするチカラ ● テストをするチカラ 4
5.
3つのスキルをどう身につ
けるか ● 学校では教えてくれない ● 教科書を読む? ● 実際のプロジェクトで経験する? ● オープンソースのプロジェクトに参加? ● 師匠に弟子入り? ● そこでプログラミングキャンプだ 5
6.
ソースコードの読み方 ●
ソースコードって何? ● 人間がプログラミング言語などを用い て記述したもの。 ● そのままではコンピュータは実行できないので 、通常、コンパイラと呼ばれるソフトウェアで 直接実行できる形式に変換して実行されるか、 インタプリタと呼ばれるソフトウェアで字面を 解釈し実行される。 6
7.
トラブルシューティングと
ソースコードの読み方 ● トラブルシューティングと問題の理解 ● 実践的なコードの理解 7
8.
ソースコードを読むチカラ ●
プログラマの基礎体力 ● ソフトウェア開発コストの大部分は保守 ● 不具合修正、改良、機能追加にはコードの理解 が必須 ● 技術者の付加価値 ● OSSは深追いできる ● 陳腐化しにくい ● プロフェッショナルとしての研鑚 ● すぐれた技術者はソースコードを上手に読む 8
9.
コードの読み方 ●
なぜ、コードを読むのか ● どのように、読むのか 9
10.
なぜコードを読むのか? ●
仕事だから(目的中心) ● トラブルシューティング(不具合修正) ● 機能修正、機能開発 ● 自己研鑚、勉強 ● 趣味だから(興味中心) ● 楽しいから ● 自己啓発(知的好奇心) ● 不純な動機 ● 形から入る 10
11.
なぜコードを読むのか ●
目的中心の場合 ● 対象に対する基礎知識は必要 ● アーキテクチャ OS、プログラミング言語、RDBMS、… ● 定番の教科書で知識を得る 11
12.
なぜコードを読むのか ●
興味中心の場合 ● 人それぞれ、人生いろいろ ● 無目的でもいいじゃないか ● 熟読、濫読、積読、黙読、音読、再読、誤読、 精読、速読、耽読、通読、復読、輪読、朗読、 輪読、… 12
13.
コードの理解について ●
モットー: コードは読むな、 理解しろ〜 13
14.
どのようにコードを理解す
るのか ● 個人的な方法を紹介する ● 唯一あるいはベストな方法というわけでもない ● 適材適所、もっと良い方法があると思う ● 公開することによって進化したい(もっと良い 方法への模索) 14
15.
ソースコードを読む視点
微視的理解 巨視的理解 静的理解 動的理解 15
16.
理解の仕方、読み方 ●
静的、動的理解 ● 微視的、巨視的 ● 規模の把握 ● ツールの利用 ● 事例 16
17.
静的理解、動的理解 ●
静的理解 ● 字面での理解 ● 動的理解 ● 動作による理解 17
18.
静的、動的構造 ●
静的構造(デモ) ● 規模 ● ディレクトリ構造 ● 名前つけ規約 ● 動的構造 ● 呼び出し経路 ● プロファイリング ● 実行結果 18
19.
微視的、巨視的 ●
微視的:細部からの理解 ● 最終的にはコードの一行 ● 巨視的:全体からの理解 ● 規模、構造、機能など。実行結果(性能?) ● 俯瞰図、鳥瞰図。 19
20.
規模の把握(巨視的理解) ●
規模重要 ● 規模(相手)を知らずして作戦を立てられない ● 大局的な地図、俯瞰図、鳥瞰図 ● 大規模になればなるほど、システマティックな 方法論が必要になってくる ● 巨視的な理解 20
21.
規模の把握 ●
小規模:100K行未満程度、 ファイル数100未満 10人未満 ● 中規模:100K行〜1M行程度 ファイル数100〜1000未満 100人未満 ● 大規模:1M行以上 ファイル数1000以上 100人以上 ざっくりの規模感 21
22.
規模の把握(例) ●
find -type f -name "*.[ch]"|wc ● find -type f -name "*.[ch]"|xargs wc|grep total Ruby 1.8.5 257 197767 Linux 2.6.18 16522 680万 MySQL 5.0.24a 1795 988463 22
23.
ディレクトリ構造 ●
トップディレクトリは、ソフトウェア の論理的構造を表している ● doc ドキュメント ● lib ライブラリ関係 ● test テスト ● ソースツリーの把握 23
24.
ドキュメント ●
README, INSTALL, COPYING, … ● 内部ドキュメント(Docs) ● リリースノート ● ChangeLog 24
25.
変更の履歴 ●
ChangeLog/Release Notes ● コード管理システム ● 例:Linux git/Subversion/CVS ● Mailing List ● Wiki ● blog ● 変更(時間軸)の微視的理解 25
26.
ドキュメント、情報収集 ●
マニュアルを読む ● サーチエンジン(Google)に聞く ● Mailing List ● Bug database ● 開発者との会話(シンポジウムなど) ● 勉強会 26
27.
ソースコードを読む視点
微視的理解 巨視的理解 ディ ト 構造、 レク リ 名前付け規約 静的理解 ソ ノ ースコ 、 h a n ge Log 、 リ ート ード C リ ース 、規模の把握( など) 行数、 ァ ル数 フ イ 動的理解 デバッガによる実行 実行性能、 グレッ ンテスト リ ショ 27
28.
いよいよコードを読む? ●
ツール ● エディタ:emacs ● デバッガ:gdb ● クロスレファレンス:cscope ● カーネルの場合、クラッシュダンプ(crash) 28
29.
デモ、実習 ●
例題としてrubyを読むことにする。 ● ● GNU Hello ● http://savannah.gnu.org/projects/hello 29
30.
実習 ●
ソースコードの規模を理解する ● ディレクトリ構造を理解する ● ビルドする ● ソースコードのナビゲート ● 機能変更をする 30
31.
実習 ●
ディレクトリ構造を理解する ● ファイル名を眺める ● ファイル数を調べる ● プログラムの行数を調べる 31
32.
実習 ●ソースコードの入手
$ git-clone git:// (講師に聞いてください) ● ビルドの準備 READMEをよく読む ● 必要なツールを揃える - automake <http://www.gnu.org/software/automake/> - autoconf <http://www.gnu.org/software/autoconf/> - bison <http://www.gnu.org/software/bison/> - gettext <http://www.gnu.org/software/gettext/> - git <http://git.or.cz/> - gperf <http://www.gnu.org/software/gperf/> - gzip <http://www.gnu.org/software/gzip/> - perl <http://www.cpan.org/> - rsync <http://samba.anu.edu.au/rsync/> - tar <http://www.gnu.org/software/tar/> 32
33.
実習 ●
ビルド $ time git clone ssh:// (講師から情報を得る) $ cd ruby $ time autoconf $ time ./configure $ time make $ time make test 33
34.
●
$ git checkout -b trunk origin/trunk ● $ autoconf ● ./configure ● make -j4 miniruby 34
35.
動的理解 ●
ビルド 35
36.
動的理解 ●
ともかく動かす ● make ● strace ● ltrace ● gdb ● oprofile ● リグレッションテスト ● ベンチマークテスト 36
37.
make ●
とりあえず、make ● 実行環境の構築 ● gcc -g (デバッグシンボルを付加する) 通常はMakefileのCFLAGSなどに設定 ● cscopeのインデックスを作成 ● ビルドはemacsのshellなどから行い、ビルドの ログを取得しておくと便利 37
38.
strace ●
システムコールのトレース $ strace ruby -v execve("/usr/local/bin/ruby", ["ruby", "-v"], [/* 39 vars */]) = 0 uname({sys="Linux", node="asianux2.miraclelinux.com", ...}) = 0 brk(0) = 0x976a000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or dir open("/etc/ld.so.cache", O_RDONLY) =3 fstat64(3, {st_mode=S_IFREG|0644, st_size=89946, ...}) = 0 old_mmap(NULL, 89946, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7 close(3) =0 open("/lib/libdl.so.2", O_RDONLY) =3 38
39.
gdb ●
デバッガはコードを理解するためにあ る ∴コードを読むために使う ● http://savannah.gnu.org/projects/gdb 39
40.
gdbで読むための準備 ●
gcc -g でコンパイル ● コンパイルしたコードサイズが大きく なる以外、特に副作用はない ● printfデバッグは有害無益 40
41.
gdb ●
ブレークポイントを設定 ● ウオッチポイント(変数の変更) ● run ● 止まった時点で ● bt スタックフレームの表示 ● p 変数の表示 ● c 実行再開、s ステップ実行(関数に潜る)、 n ステップ実行(関数に潜らない) ● 繰り返す 41
42.
oprofile ●
プロファイラー ● 実行時のボトルネックを発見 ● # opcontrol --start ● テストの実行 ● # opcontrol --stop ● # opreport -l ● http://oprofile.sourceforge.net/news/ 42
43.
oprofile CPU: Core Solo
/ Duo, speed 2666.77 MHz (estimated) Counted DCACHE_PEND_MISS events (Weighted cycles of L1 miss outstanding) with a unit mask of 0x00 (Weighted cycles) count 100000 vma samples % linenr info app name symbol name 000000000042be50 244787 33.2383 gc.c:1661 ruby os_each_obj 000000000042bfac 1 4.1e-04 gc.c:1599 000000000042bfb9 5 0.0020 gc.c:1599 000000000042bfbe 6 0.0025 gc.c:1599 000000000042bfd0 4862 1.9862 gc.c:1601 000000000042bfd3 228573 93.3763 gc.c:1601 000000000042bfd6 2698 1.1022 gc.c:1601 000000000042bfd8 250 0.1021 ruby.h:672 43
44.
oprofile ●
高速道路で、ズバリ最もコストのか かっているところに連れて行ってくれ る ● コードを読まないで、理解する極意 44
45.
微視的理解 ●
ひたすらコードを読む ● 王道はない ● ↑身もふたもない ● データ構造、変数などに注目し、どこ で定義され、参照され、代入(変更) されているかという観点でみる ● デバッガとエディタ、クロスリファレ ンスツールを駆使 45
46.
微視的理解 ●
$ time find -type f -name '*.[ch]' -or -name '*.cpp' -or -name '*.cxx' | xargs egrep -l hogehoge ● $ time grep -r –include='*.[ch]' hogehoge . ● hogehogeを含むファイルを検索 46
47.
微視的理解 ●
クロスリファレンスツール ● 変数の定義(型情報)、変更(代入)、参照 ● 変数(関数)が、どのように定義されていて、ど のように参照、変更されているかを追う ● cscope http://cscope.sourceforge.net/ ● lxr http://lxr.linux.no/ ● GNU GLOBAL http://www.gnu.org/software/global/ ● ack-grep 47
48.
実習 ●
cscopeを利用する $ time cscope-indexer -r ● emacsを利用する ● gdbを利用する ● oprofileを利用する 48
49.
ソースコードを読む視点
微視的理解 巨視的理解 ディ ト 構造、 レク リ 名前付け規約 静的理解 ソースコ 、 h a n ge Log 、 リ ード C ノ 、 sco p e ート c リ ース 、規模の把握( など) 行数、 ァ ル数 フ イ 動的理解 デバッ (g db )による実行、 e ガ strac op ro fie 、 c e 、 ッ ンテスト ショ l stra 実行性能、 グレ リ 49
50.
参考書 ●
Linux ● 詳解LINUXカーネル第三版 ISBN:487311313X ● Linuxカーネル2.6解読室 ISBN:4797338261 ● コードリーディング ● ISBN:4839912653 ● Rubyソースコード完全解説 ● ISBN:4844317210(品切れ中) http://i.loveruby.net/ja/rhg/ 50
51.
ユメのチカラ(ブログ) ●
http://blog.miraclelinux.com/yume/ ● ブックマークで見た人気エントリー ● ソースコードの読み方(524個) ● http://blog.miraclelinux.com/yume/2007/08/post_d6bd.html ● デバッグ方法論(99個) ● http://blog.miraclelinux.com/yume/2007/08/post_d3eb.html ● 多くの人に興味がある話題 51
52.
●
ブログ:ユメのチカラ ● http://blog.miraclelinux.com/yume/ ● 未来のいつか/hyoshiokの日記 ● http://d.hatena.ne.jp/hyoshiok/ 52