SlideShare a Scribd company logo
1 of 25
Download to read offline
Trace 程式碼之皮 
Wen Liao
Disclaimer 
投影片資料為作者整理資料及個人意見,沒有經 
過嚴謹確認,請讀者自行斟酌
目標 
分享在Linux 下使用編輯器 trace 程式碼的技巧
測試環境: OS
測試環境: 編輯器
動機 
● 菜鳥的痛苦,看不懂別人的程式碼。 
● 花時間時間在找尋 
○ 這變數誰在用的? 
○ 呼叫的這個函數到在那邊實作? 
○ 這個函數是誰在呼叫的? 
○ 我找到的變數到底是在哪個函數內? 
○ ...
編輯器也是有效率高低的 
● 找出現在游標的變數會被誰呼叫? 
○ 菜鳥式:以gedit為例 
■ 游標移動到Search,按一下滑鼠左鍵 
■ 選Find,從鍵盤輸入要找的變數名稱 
■ 游標移動到搜尋按鈕,看要往上找還是往下找 
○ 非菜鳥式:以gedit為例 
■ 複製變數,按ctrl + f,貼上 
■ ctrl + g往下找, shift + crtl + g往上找 
○ vim:單鍵搞定 
■ * 自動幫你往下找,不用複製貼上變數名稱 
■ # 自動幫你往上找,不用複製貼上變數名稱
我就喜歡用gedit慢慢 
找,咬我啊
等你遇到一個檔案上萬行, 
單一函數幾百行的時候就知 
道厲害!
為什麼要用編輯器的進階功能? 
● 搜尋和定位是一種干擾 
○ 你必須停下目前的思緒,找出下一筆資料才能夠繼續 
思考。 
● 這些功能能夠讓搜尋和定位這兩件事時間最 
小化,切換程式思維的時間就會更少。
說明 
● 本投影片只是vgod的文章:給程式設計師的 
Vim入門圖解說明的註腳
範例程式,九九乘法表
快速找下一個相同字串 
①游標在這邊,按* 
_ 
_ ②游標移動了
快速找上一個相同字串 
②游標移動了 
①游標在這邊,按# 
_ 
_
馬上知道自己在哪個函數中 
①游標在這邊,按[[ 
②游標移動了 
_
直接跳到下一個函數 
①游標在這邊,按]] 
②游標移動了 
_
跳到目前block開頭 
②游標移動了 
_ 
①游標在這邊,按[{
跳到目前block結尾 
①游標在這邊,按]} 
②游標移動了 
_
成對跳躍 (1) 
按%切換 
_ _
成對跳躍 (2) 
按%切換 
_ 
_
成對跳躍%還可以用在 
● [ ] 
● #ifdef …. #endif
切回上次游標位置 
①游標在這邊,按[[ 
②游標移動了 
_ 
③按``切回上次游標位置
結論 
● 善用編輯器功能,可以減少trace code的時 
間。 
● 上面的使用方式當專案程式碼大到某個程度 
效益就不大了。 
● 這些工具只是減少trace code的搜尋定位時 
間,理解程式碼拼湊並理解完全和工具無關。 
而這些才是真正trace code的肉、骨、髓。
延伸作業 
● 安裝ctags和cscope,嘗試操作。 
● 學習grep和簡單的POSIX regular expression
參考資料 
● 給程式設計師的Vim入門圖解說明 - vgod 
○ http://blog.vgod.tw/2009/12/08/vim-cheat-sheet-for-programmers/

More Related Content

What's hot

[CB18] 使い捨てられた攻撃インフラの残骸の中からも攻撃者の痕跡を探る ― 動的・静的な DNS フォレンジックによる検知指標診断システム by 谷口...
[CB18] 使い捨てられた攻撃インフラの残骸の中からも攻撃者の痕跡を探る ― 動的・静的な DNS フォレンジックによる検知指標診断システム by 谷口...[CB18] 使い捨てられた攻撃インフラの残骸の中からも攻撃者の痕跡を探る ― 動的・静的な DNS フォレンジックによる検知指標診断システム by 谷口...
[CB18] 使い捨てられた攻撃インフラの残骸の中からも攻撃者の痕跡を探る ― 動的・静的な DNS フォレンジックによる検知指標診断システム by 谷口...
CODE BLUE
 
社会人博士という選択肢
社会人博士という選択肢社会人博士という選択肢
社会人博士という選択肢
Hiroki Toyokawa
 
書籍 「Python FlaskによるWebアプリ開発入門 物体検知アプリ&機械学習APIの作り方」 を通して伝えたいFlaskのプラクティス.pdf
書籍 「Python FlaskによるWebアプリ開発入門 物体検知アプリ&機械学習APIの作り方」 を通して伝えたいFlaskのプラクティス.pdf書籍 「Python FlaskによるWebアプリ開発入門 物体検知アプリ&機械学習APIの作り方」 を通して伝えたいFlaskのプラクティス.pdf
書籍 「Python FlaskによるWebアプリ開発入門 物体検知アプリ&機械学習APIの作り方」 を通して伝えたいFlaskのプラクティス.pdf
taisa831
 

What's hot (20)

東大大学院 戦略ソフトウェア特論2021「ロボットで世界を計算可能にする」海野裕也
東大大学院 戦略ソフトウェア特論2021「ロボットで世界を計算可能にする」海野裕也東大大学院 戦略ソフトウェア特論2021「ロボットで世界を計算可能にする」海野裕也
東大大学院 戦略ソフトウェア特論2021「ロボットで世界を計算可能にする」海野裕也
 
論文に関する基礎知識2015
論文に関する基礎知識2015論文に関する基礎知識2015
論文に関する基礎知識2015
 
グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化
グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化
グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化
 
JSF++って何
JSF++って何JSF++って何
JSF++って何
 
要求開発×アジャイル開発のポイント
要求開発×アジャイル開発のポイント要求開発×アジャイル開発のポイント
要求開発×アジャイル開発のポイント
 
アドテクを支える技術 〜1日40億リクエストを捌くには〜
アドテクを支える技術 〜1日40億リクエストを捌くには〜アドテクを支える技術 〜1日40億リクエストを捌くには〜
アドテクを支える技術 〜1日40億リクエストを捌くには〜
 
[CB18] 使い捨てられた攻撃インフラの残骸の中からも攻撃者の痕跡を探る ― 動的・静的な DNS フォレンジックによる検知指標診断システム by 谷口...
[CB18] 使い捨てられた攻撃インフラの残骸の中からも攻撃者の痕跡を探る ― 動的・静的な DNS フォレンジックによる検知指標診断システム by 谷口...[CB18] 使い捨てられた攻撃インフラの残骸の中からも攻撃者の痕跡を探る ― 動的・静的な DNS フォレンジックによる検知指標診断システム by 谷口...
[CB18] 使い捨てられた攻撃インフラの残骸の中からも攻撃者の痕跡を探る ― 動的・静的な DNS フォレンジックによる検知指標診断システム by 谷口...
 
社会人博士という選択肢
社会人博士という選択肢社会人博士という選択肢
社会人博士という選択肢
 
書籍 「Python FlaskによるWebアプリ開発入門 物体検知アプリ&機械学習APIの作り方」 を通して伝えたいFlaskのプラクティス.pdf
書籍 「Python FlaskによるWebアプリ開発入門 物体検知アプリ&機械学習APIの作り方」 を通して伝えたいFlaskのプラクティス.pdf書籍 「Python FlaskによるWebアプリ開発入門 物体検知アプリ&機械学習APIの作り方」 を通して伝えたいFlaskのプラクティス.pdf
書籍 「Python FlaskによるWebアプリ開発入門 物体検知アプリ&機械学習APIの作り方」 を通して伝えたいFlaskのプラクティス.pdf
 
ICLR2020 オンライン読み会 Deep Semi-Supervised Anomaly Detection
ICLR2020 オンライン読み会 Deep Semi-Supervised Anomaly DetectionICLR2020 オンライン読み会 Deep Semi-Supervised Anomaly Detection
ICLR2020 オンライン読み会 Deep Semi-Supervised Anomaly Detection
 
ATT&CK Updates- ATT&CK for mac/Linux
ATT&CK Updates- ATT&CK for mac/LinuxATT&CK Updates- ATT&CK for mac/Linux
ATT&CK Updates- ATT&CK for mac/Linux
 
Oxygen Not Includedをやるべき4つの理由
Oxygen Not Includedをやるべき4つの理由Oxygen Not Includedをやるべき4つの理由
Oxygen Not Includedをやるべき4つの理由
 
MITRE ATT&CKcon 2.0: Using Threat Intelligence to Focus ATT&CK Activities; Da...
MITRE ATT&CKcon 2.0: Using Threat Intelligence to Focus ATT&CK Activities; Da...MITRE ATT&CKcon 2.0: Using Threat Intelligence to Focus ATT&CK Activities; Da...
MITRE ATT&CKcon 2.0: Using Threat Intelligence to Focus ATT&CK Activities; Da...
 
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtcYahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
 
GoでMinecraftっぽいの作る
GoでMinecraftっぽいの作るGoでMinecraftっぽいの作る
GoでMinecraftっぽいの作る
 
TeXは軽量マークアップの夢を見るか
TeXは軽量マークアップの夢を見るかTeXは軽量マークアップの夢を見るか
TeXは軽量マークアップの夢を見るか
 
犬でもわかる公開鍵暗号
犬でもわかる公開鍵暗号犬でもわかる公開鍵暗号
犬でもわかる公開鍵暗号
 
マルチモーダル深層学習の研究動向
マルチモーダル深層学習の研究動向マルチモーダル深層学習の研究動向
マルチモーダル深層学習の研究動向
 
自然言語処理における深層学習を用いた予測の不確実性 - Predictive Uncertainty in NLP -
自然言語処理における深層学習を用いた予測の不確実性  - Predictive Uncertainty in NLP -自然言語処理における深層学習を用いた予測の不確実性  - Predictive Uncertainty in NLP -
自然言語処理における深層学習を用いた予測の不確実性 - Predictive Uncertainty in NLP -
 
NLPにおける再現性
NLPにおける再現性NLPにおける再現性
NLPにおける再現性
 

Viewers also liked

Debug C/C++ Programs More Comfortably @ 2014.12.14 Trace Code Meetup
Debug C/C++ Programs More Comfortably @ 2014.12.14 Trace Code MeetupDebug C/C++ Programs More Comfortably @ 2014.12.14 Trace Code Meetup
Debug C/C++ Programs More Comfortably @ 2014.12.14 Trace Code Meetup
Jian-Hong Pan
 
trace code tool 以及人月神話
trace code tool 以及人月神話trace code tool 以及人月神話
trace code tool 以及人月神話
Yi-Hsiang Huang
 

Viewers also liked (20)

GNU ld的linker script簡介
GNU ld的linker script簡介GNU ld的linker script簡介
GNU ld的linker script簡介
 
Debug C/C++ Programs More Comfortably @ 2014.12.14 Trace Code Meetup
Debug C/C++ Programs More Comfortably @ 2014.12.14 Trace Code MeetupDebug C/C++ Programs More Comfortably @ 2014.12.14 Trace Code Meetup
Debug C/C++ Programs More Comfortably @ 2014.12.14 Trace Code Meetup
 
Trace kernel code tips
Trace kernel code tipsTrace kernel code tips
Trace kernel code tips
 
開放街圖 自助旅行的好幫手
開放街圖   自助旅行的好幫手開放街圖   自助旅行的好幫手
開放街圖 自助旅行的好幫手
 
GNU AS簡介
GNU AS簡介GNU AS簡介
GNU AS簡介
 
from Source to Binary: How GNU Toolchain Works
from Source to Binary: How GNU Toolchain Worksfrom Source to Binary: How GNU Toolchain Works
from Source to Binary: How GNU Toolchain Works
 
UPnP 1.0 簡介
UPnP 1.0 簡介UPnP 1.0 簡介
UPnP 1.0 簡介
 
How A Compiler Works: GNU Toolchain
How A Compiler Works: GNU ToolchainHow A Compiler Works: GNU Toolchain
How A Compiler Works: GNU Toolchain
 
trace code tool 以及人月神話
trace code tool 以及人月神話trace code tool 以及人月神話
trace code tool 以及人月神話
 
Annotation processing
Annotation processingAnnotation processing
Annotation processing
 
What Can Compilers Do for Us?
What Can Compilers Do for Us?What Can Compilers Do for Us?
What Can Compilers Do for Us?
 
A Brief Introduction to Regular Expression with Python 2.7.3 Standard Library
A Brief Introduction to Regular Expression with Python 2.7.3 Standard LibraryA Brief Introduction to Regular Expression with Python 2.7.3 Standard Library
A Brief Introduction to Regular Expression with Python 2.7.3 Standard Library
 
Cygwin Install How-To (Chinese)
Cygwin Install How-To (Chinese)Cygwin Install How-To (Chinese)
Cygwin Install How-To (Chinese)
 
Re-identification of Anomized CDR datasets using Social networlk Data
Re-identification of Anomized CDR datasets using Social networlk DataRe-identification of Anomized CDR datasets using Social networlk Data
Re-identification of Anomized CDR datasets using Social networlk Data
 
Timing over packet demarcation
Timing over packet demarcationTiming over packet demarcation
Timing over packet demarcation
 
Hello world在那邊?背景說明
Hello world在那邊?背景說明Hello world在那邊?背景說明
Hello world在那邊?背景說明
 
Asterisk (IP-PBX) CDR Log Rotation
Asterisk (IP-PBX) CDR Log RotationAsterisk (IP-PBX) CDR Log Rotation
Asterisk (IP-PBX) CDR Log Rotation
 
AI Chatbot Service Framework based on Backpropagation Network for Predicting ...
AI Chatbot Service Framework based on Backpropagation Network for Predicting ...AI Chatbot Service Framework based on Backpropagation Network for Predicting ...
AI Chatbot Service Framework based on Backpropagation Network for Predicting ...
 
Internationalization(i18n) of Web Page
Internationalization(i18n) of Web PageInternationalization(i18n) of Web Page
Internationalization(i18n) of Web Page
 
從組裝軟體中談談軟體發展管理
從組裝軟體中談談軟體發展管理從組裝軟體中談談軟體發展管理
從組裝軟體中談談軟體發展管理
 

More from Wen Liao

GNU gettext簡介 - 以C語言為範例
GNU gettext簡介 - 以C語言為範例GNU gettext簡介 - 以C語言為範例
GNU gettext簡介 - 以C語言為範例
Wen Liao
 
Testing in python 2.7.3
Testing in python 2.7.3Testing in python 2.7.3
Testing in python 2.7.3
Wen Liao
 

More from Wen Liao (11)

Hello world 的一生
Hello world 的一生Hello world 的一生
Hello world 的一生
 
Notes on oracle solaris 11.3 linkers and libraries guide chapter one
Notes on oracle solaris 11.3 linkers  and libraries guide  chapter oneNotes on oracle solaris 11.3 linkers  and libraries guide  chapter one
Notes on oracle solaris 11.3 linkers and libraries guide chapter one
 
故事:自由軟體和 Richard Stallman
故事:自由軟體和 Richard Stallman故事:自由軟體和 Richard Stallman
故事:自由軟體和 Richard Stallman
 
A successful git branching model 導讀
A successful git branching model 導讀A successful git branching model 導讀
A successful git branching model 導讀
 
淺談Debian套件打包
淺談Debian套件打包淺談Debian套件打包
淺談Debian套件打包
 
GNU Make, Autotools, CMake 簡介
GNU Make, Autotools, CMake 簡介GNU Make, Autotools, CMake 簡介
GNU Make, Autotools, CMake 簡介
 
GNU gettext簡介 - 以C語言為範例
GNU gettext簡介 - 以C語言為範例GNU gettext簡介 - 以C語言為範例
GNU gettext簡介 - 以C語言為範例
 
Guide to GStreamer Application Development Manual: CH1 to CH10
Guide to GStreamer Application Development Manual: CH1 to CH10Guide to GStreamer Application Development Manual: CH1 to CH10
Guide to GStreamer Application Development Manual: CH1 to CH10
 
Testing in python 2.7.3
Testing in python 2.7.3Testing in python 2.7.3
Testing in python 2.7.3
 
軟體組裝心得分享
軟體組裝心得分享軟體組裝心得分享
軟體組裝心得分享
 
Introduce to Linux command line
Introduce to Linux command lineIntroduce to Linux command line
Introduce to Linux command line
 

Trace 程式碼之皮