偵錯技術.

Slides:



Advertisements
Liknende presentasjoner
 練習 XSL 程式的撰寫 › 了解 XSL 的轉換意義  在 XML 文件中宣告 XSL › fhwang XML Programming 10.
Advertisements

ヴァンデグラフでの回路図. VME Discri V895 ECL Logic Delay 200ns VME TDC V775 HIME Analog Delay 200ns VME QDC V792 LEMO BNC FLAT 32ch 16ch x2 32ch BNC - LEMO 変換 A.
6218 白盛弘. 北極熊的家 8&p=%E5%8C%97%E6%A5%B5%E7%86%8A&fr2=tab-web&fr=yfp-s.
鼾音訊號測量計畫 執導老師 : 侯春茹 老師 組員 : 金雍庭 胡庭恩 林承葦 賴彥亨. 目錄 訊號的簡介 ▫ 臨床應用 ▫ 量測部位與方法 ▫ 訊號特徵 訊號處理流程 鼾聲量得訊號.
いまこれが熱い 米国の Web2.0 サービス CNET Japan Innovation Conference 2006 Autumn データセクション(株) 橋本大也 (株)ネットエイジグループ チーフエバンジェリスト.
LHU_ME 魏慶隆 李瑞宗老師 零件組立之基本操作  零件組立之步驟  Component  Assembly  [ 選取零件 ]  定位  定位指令說明 定位指令說明.
2009 Summer Camp MRP 物料需求規劃 演講者:黃怡勳.
是 1. 全球暖化是真的嗎 ? 人類 2. 是什麼原因又是誰造成的 ? 破壞基本生態的穩定 3. 氣候改變對地球及我們有什麼影響 ? 最貧窮、最低窪、最熱的國家受害最大,但是每個人都無法倖免 於難 4. 誰會受到最大的衝擊 ? 發展與氣候變化 國際商務學系 A 林宜 如.
弊社取り扱いスマートホン媒 体 Avarice Yell inc.. スマートフォン取り扱い アドネットワーク&リスティング Avarice Yell inc.
線形代数学.
Order To Cash 主講人:蓋冠宇.
芬蘭 - 進口 黃硯翎 A 國花:鈴蘭. 芬蘭進口 黃硯翎 A 國家印象代表圖 ~~ 桑拿浴.
要求プロセスの数量化 要求工学 WG in 宇和島 要求獲得 要求記述 要求検証 要求管理 Stakeholder の識別 要求抽出 ネゴシエーション モデル化 記述 記述の解析 テスト・実行 要求工学プロセス.
人类进步与环境代价 —— 绿色化学关注的问题 孙立广 (中国科技大学极地环境研究室). 一、引言 从绿色革命到绿色科技 20 世纪 60 年代 “ 绿色革命 ” 的结果: 农作物高产 高产水稻品种 化肥大量使用烈性农药 水土污染、 肥力降低 水荒.
小沢研究室紹介 大学院を志す人のために. 素粒子・原子核物理学とは? 自然を支配する基本法則はどのようなものか 物質を構成する究極の要素は何か 宇宙はなぜ現在の姿になっているのか 宇宙にはどのような物質が存在し、それはどのように作られ たのか 2000年以上も前から人類の探究心を駆り立ててやまないこれら.
第 14 章 SQL 語言處理資料庫 14-1 SQL 語言的基礎14-1 SQL 語言的基礎 14-2 SQL 資料庫查詢指令14-2 SQL 資料庫查詢指令 14-3 SQL 聚合函數14-3 SQL 聚合函數 14-5 SQL 語言的資料庫操作14-5 SQL 語言的資料庫操作.
HTML + Dreamweaver 學術 課程. 甚麼是 HTML ? HTML 全名是 Hyper Text Markup Language ﹐ 是電腦語言的一種。這種電腦語言是可透過瀏 覽軟件 (Browser - Internet Explorer, Netscape) 翻譯出來﹐翻出來的就是我們看到的.
1 © 2011 台灣培生教育出版 (Pearson Education Taiwan). 2 學習目標 1. 了解收益管理在供應鏈中所扮演的角色。 2. 界定出何種收益管理做法具有效率的情況。 3. 描述制定收益管理決策時,需要考量的取捨條 件。
雜 湊 表.
中国法律检索系统. 数据库介绍 系统收录 22 个相对独立但又互通互联的法律信息数据库:《中 国法律法规规章司法解释全库》、《中国地方法规规章库》、 《港澳台法律库》、《中华人民共和国条约库》、《外国与国际 法律库》、《法律文书样式库》、《最高人民法院公报案例库》、 《中国法院裁判文书数据库》、《合同范本数据库》、《仲裁裁.
1 Understanding and Constructing Approaches to Teaching 第二講 教案設計初探 林碧霞博士 Lam Bick Har©2006.
2005 年 1 月 18 日台灣視障用數位典藏之 語音檢索系統 1 「貓頭鷹」 ~ 台灣視障用數位典藏 之語音檢索系統 93 年數位典藏創意加值計畫心得交流 「貓頭鷹」 ~ 台灣視障用數位典藏 之語音檢索系統 93 年數位典藏創意加值計畫心得交流 報告人 : 唐傳義 張智星 國立清華大學資工系教授.
EQ與情緒管理 資料截自清涼音出版社(VCD AV13)-張錦貴教授.
计算器的使用 CASIO 系列. 可编程序计算器使用方法简介 CASIO fx-350ms.
2009 年世界地球日 您必須知道的全球暖化現況 為倡導保護地球,國際上訂定每年的四月二十四 日世界地球日。今年活動主軸是大家一齊來防止地 球暖化。在那一天,世界各地愛護環境的人,不但 要用行動展現「熱愛地球」實力,也要依推動者的 建議,一齊穿上藍色系列的衣裝出門,以展現退暖.
第八組  M 林秋香 M 顧家容  M 裴方南 M 陳黃慶璃  M 賴盈如 M 葉芳如.
A02 通識教育課程 ( 二年級 ) 生物化學、醫學生涯、醫學研究方法 金髮小蜜的故事 教案代碼: 9622A02-4.
企業員工訓練與發展 7.1 訓練與發展的意義與系統化程序 7.2 訓練需求分析 7.3 訓練的設計與準備 7.4 非管理職員工的訓練方法
Word Word 2000 的操作環境 功能表列 尺規 垂直捲軸 顯示模式 瀏覽物件鈕 水平捲軸 狀態顯示列 內文區域 關閉鈕 放到最大鈕 縮到最小鈕標題列 插入點.
專業‧互相尊重‧開拓者精神 台北大學投影機案 教 育 訓 練. Agenda § 使用前注意說明 § 控制面板操作說明 § 投影布幕之使用 § 關機操作順序說明 § 簡易故障排除 § 問題討論時間.
教學助理培訓課程 部落格城市管理 講師 : 程如晞.
土地使用管制 2008 年 10 月 23 日. 政府導向 社會目標 比較真實市場 與社會目標 規劃 政策 政府 市場 失靈 土地市場 財產市場 傳統福利經濟學觀點下的規劃理念 設計 引起被發現 去改變.
講述教學法案例.
11 類別化程式 11.1 結構與類別 結構與類別 結構化程式設計 結構化程式設計 物件導向程式設計 物件導向程式設計 程式類別 (class)
1987 年的 聖誕節前夕,當我正在美國進修 資管碩士學位時,有一門課要求我們四個 人一組到企業去實際幫他們寫系統,由於 同組的另外三個老美對系統開發都沒什麼 概念,所 以我這位組長只好重責一肩挑起, 幾乎是獨立完成了所有的工作。終於拖到 了結案,廠商及老師對我們的(其實是我 的)系統都相當滿意。第二天我滿懷希望.
MPI 分布内存并行 程序开发. 第四章 点对点通信函数 第四章 点对点通信函数 传送机制(两种): 阻塞方式,它必须等到消息从本地送出之后才可 以执行后续的语句,保证了缓冲区等资源的可再 用性; 非阻塞方式,它不须等到消息从本地送出就可以 执行后续的语句,但非阻塞调用的返回并不保证 资源的可再用性。
類比式語言教室材使用說明會 東吳大學語言教學中心. 說明會內容 l 開(關)機步驟 l 操作畫面說明:聲音頻道、影像頻道 l 操作示範: DVD 影片、教學電腦、錄影 帶、 3D 教材提示機、錄音帶 l 耳機互動:監聽、對話、分組、示範 l 錄音功能:對拷、學生自主拷貝.
4.1 單向鏈結串列 4.2 堆疊的加入與刪除 4.3 佇列的加入與刪除 4.4 其他型式的佇列
香港科技大学学生会 语言学会 广东话课程 2007 第二节 自我介绍. 温习 1 早晨 返学 放学 jou2 san4 faan1 hok6 fong3 hok6 你上几点堂? nei3 seung5 gei2 dim2 tong4 你食左早餐未呀? nei5 sik6 jo2 jou2 can1.
江西省委组织部远教办 (地 市 视 频 会 议 系 统)培训 江西省委组织部远教办 (地 市 视 频 会 议 系 统)培训 主讲人:饶斌.
口腔良性腫瘤 蔡政峰醫師.
加藤ゼミへのエントリー (ゼミ活動の際のスタッフプレート ♪ ). エントリーシート方式 面談 2〜3名で、 10 〜 20 分の面談をします。 エントリーシート を提出してもらいます。
民意型態 民意調查 蔡佳泓.  True Believers— 真實信仰者,具有意識形態  Concerned Citizen— 關心政治者,對於政治 有興趣.
國立台北科技大學 工業工程與管理所碩士論文 網頁行銷美學與顧客體驗關鍵因素之研究 指導教授:羅啟源教授 研究生:黃金圳甄
克里斯提安.齊瑪曼 (Krystian Zimerman) 齊瑪曼  出生於波蘭扎布熱  父親啟蒙開始學習鋼琴  1963 年在卡托維治音樂院師從 楊辛斯基 楊辛斯基  1975 年贏得蕭邦國際 鋼琴大賽第一名,當時年僅十九歲 鋼琴大賽第一名,當時年僅十九歲.
林綺雲 國立台北護理學院 生死教育與輔導研究所教授(創所所長)
資料結構 7-1 陣列 7-2 鏈結串列 7-3 堆疊和佇列 7-4 樹狀結構.
財務管理概論 劉亞秋‧薛立言 合著 (東華書局, 2007)
行銷學 marketing: an introduction
授課老師:吳有龍 教授 報告學生:王智鳳 學號: G 優使性 - 需求分析及高階設計 優使性 - 需求分析及高階設計.
嵌入式操作系统 陈香兰 助教:毛熠璐、吴昊 Spring 2008.
報告人:李克強 校內分機: : 圖書館電子資源利用講習.
台北大學統計系 汪群超 資料庫系統 汪群超02/22/2000. 資料庫資訊系統實例 貿易訂單管理 貿易訂單管理 職棒球員攻守紀錄 職棒球員攻守紀錄 圖書資訊系統 圖書資訊系統 VCD/DVD 租借管理系統VCD/DVD 租借管理系統 網路商場 網路商場.
吉林大学远程教育 共 计: 48 学时 主讲单位: 吉林大学基础医学院 药 理 教 研 室 第 二 十 七 讲 主讲教师: 李 晶.
第二节 鞭毛菌亚门真菌(Mastigomycotina)
1 《通信原理》总结 2 通信原理是通信学科的理论基础, 以调制和编码技术为核心,着重介绍 传输信号的形成和接收方式,进行理 论分析与性能评价。 可靠性 模拟系统的噪声性能分析 数字系统的误码性能分析 差错控制编码 有效性 各种信道复用方式: TDM , FDM , CDMA 等。
UClinux 简介 Embedded operating system μClinux uClinux 是应用于嵌入式设备的最著名、应用 最广泛一个 Linux 发行版本,它也是一个开放 源码的项目, uClinux 的源代码和开发工具可 以免费从
-- Homo Sapien -- DESIGN For A Especial Spirit Group : b 陳姵華 b 蘇若 喬 b 王淑燕 b 柳柏亙.
第 13 章 檔案與資料夾處理 13-1 檔案與資料夾操作 13-1 檔案與資料夾操作 13-2 循序檔案的文字檔案讀寫 13-2 循序檔案的文字檔案讀寫 13-3 隨機檔案的處理 13-3 隨機檔案的處理 13-4 二進位檔案的讀寫 13-4 二進位檔案的讀寫 13-5 檔案對話方塊 13-5 檔案對話方塊.
CorelDRAW X4 平面设计半月通 ─ 电子教案 第二章 手绘和形状工具的使用 本章导读 本章要点本章任务 上机实训.
DESIGNER. 創作主題: FANTASY 幻想旅程 報名方式:傳真報名 ─ 報名 ─ ( 報名表請向系辦索取或至「校園比賽 Facebook 粉絲團」下載 ) 競賽組隊:分為大專組與高中職組 報名隊伍以個人或團體組隊參加皆可,每人以報名一組為限.
有机化学 主讲教师 霍文兰 教 材 高鸿宾 主编. Chapter 5 alkynes alkadiene.
第六章 纱线和织物的基本知识.
2015 年学员操作手册 奥鹏教育. C o nt en ts 目录目录 平台首页简介 1 个人工作室 2 学习任务 3 研修活动 4 坊内答疑 5 资源分享 6.
现代陶艺 现代陶艺 -- 泥条盘筑成型 -- 泥条盘筑成型 任课教师 赵 芳. 一、陶艺的概念 所谓陶艺,它泛指陶瓷日用品,陈设品的造型、釉色 和装饰等所呈现的艺术特点,也专指陶器之中的艺术陶器 和瓷器中的艺术瓷。 陶艺作品是典型的工艺美术,它既有其他工艺美术的 共性,更有着区别于其他工艺美术的质的规定性。任何一.
野生动物保护系列讲座. 我们中国人自称为龙的传人。清朝 光绪年代,总税务司发行 “ 大龙邮票 ” , 大龙邮票的最早发行日期被认为在 1878 年 7 月 24 日至 8 月 1 日之间。 龙文化 —— 龙年.
3dsmax 基本工具介绍 3dsmax 基础建模类型介绍 多边形建模操作技巧 材质基础知识介绍 讲授: 8 节 实训: 8 节 掌握游戏 3D 制作工具 —3dsmax 的基本工作原理。
XXX 交流电路的功率. 一、正弦交流电路功率的基本概念 设正弦交流电路的总电压 u 与总电流 i 的相位差 ( 即阻 抗角 ) 为  ,则电压与电流的瞬时值表达式为 u = U m sin(  t   ) , i = I m sin(  t) 瞬时功率为 p = ui = U m I m.
Utskrift av presentasjonen:

偵錯技術

Outline 介紹一系列專門用來對付核心程式的監視技術,以及追查錯誤的技巧 訊息除錯法 查詢除錯法 觀測除錯法 排除重大系統失誤 除錯工具

訊息除錯法 Printk()讓我們能指定訊息的”登載等級” 定義在<linux/kernel.h>所宣告的八個巨集中 下述代號展開之後,會分別成為<0><1><2>…<7>之類的字串,數字越低,等級越高 如果沒在printk()註明分類代碼,則訊息的預設分類為DEFAULT_MESSAGE_LOGLEVEL(參閱cd /usr /src /kernel /printk.c)

P102 KERN_EMERG KERN_ALERT KERN_CRIT KERNERP KERN_WARING KERN_NOTICE KERN_INFO KERN_DEBUG

Console_loglevel變數初值為default_console_loglevel,可用sys_syslog系統呼叫來改變此值(1 Console_loglevel變數初值為default_console_loglevel,可用sys_syslog系統呼叫來改變此值(1.先殺掉執行中的klogd再以-c選項啟動之2.自己寫一個程式來觸發 書中範例:misc-progs/setlevel.c) 當在控制台上工作,遭遇到kernel fault,想調整console_level的現值可用簡單命令迫使所有核心訊息都出現在操控台上 #echo 8 > /proc/sys/kernel/printk

核心訊息輸出流程 printk()將訊息寫入一個環形佇列,然後喚醒正在等待的行程—也就是被syslog()系統呼叫推入修眠狀態或是正在讀取/proc/kmsg 日誌記錄引擎(syslogd和klogd),這兩種是等效的,但是直接讀取/proc/kmsg會消耗掉緩衝區裡的訊息,不會留給其他行程讀取;syslog()能讓我決定是否要將訊息留在緩衝區,也讓其他行程可以讀取。

訊息開關 研發驅動程式初期,printk()很好用,可以輔助測試~除錯程式碼,但是正式釋出驅動程式時,該如何亦切拿掉所有除錯用途的printk()? 1..修改巨集名稱,取消或恢復個別列印敘述 2..只要在編譯之前變更cflags變數值,就可以關閉所有除錯訊息 3..同樣的列印敘述,要同時可用在kernel-space與 user-space的程式裡,讓我們可以用一致方式來控制除錯訊息 P106 熟悉C preprocessor的人,甚至可以擴充巨集定義,做出除錯等級的效果,例如以不同數值定義不同等級的程度

查詢除錯法 大量使用printk()的結果,將明顯拖慢系統效能,因為syslogd必須隨時將取得的核心訊息寫入日誌檔,美印出一行訊息,就會引發一次磁碟動作 解決辦法1 : 修改/etc/syslog.conf,在日誌檔的檔名之前加一個減號(魔術記號,它要求syslogd不必每次收到新訊息就寫入磁碟) 解決辦法2 : 以其他程式來替代klogd(cat/proc/kmesg) 最佳辦法 : 是必要時才向系統查詢,Unix提供許多ps, netstat, vmstat等取得系統資訊的工具 對driver設計時而言,查詢系統資訊的主要管道有: •將資訊輸出到/proc檔案系統. •適用ioctl作業方式.

使用/proc檔案系統 /proc是靠軟體模擬出來的特殊檔案系統,並不實際存在於硬碟上,而是核心提供給user-space的資訊窗口 以/proc/modules為例,當你讀取它時它會顯示目前載入哪些模組,但此檔案系統的長度都為0.

Linux許多系統工具,如ps, top,uptime等都是從 /proc取得它們所需要的資訊 任何欲支援/proc的模組,都必須引入<linux/proc_fs.h>,來定義適當的函式 建立/proc檔案 : 驅動程式必須製作一備查函式,讓它在檔案被存取的時,及時供應資料,核心也會配置一個記憶頁給它,核心會自動將我寫在該記憶頁的資料傳回user-space

eof:指向一個整數值,驅動程式以此值讓核心知道它沒有資料要傳回 備查函式介面: int (*read_proc)(char *page,char **start,off_t offset,int count,int *eof ,void *data); page指標:指向核心預先配置的記憶頁 start:用來表示有效資料的起點位置 eof:指向一個整數值,驅動程式以此值讓核心知道它沒有資料要傳回 offset:若檔案超過一記憶頁大小,可利用分批傳輸的方式,先將*start指向page,讓呼叫者知道新資料是放在page緩衝區的開頭,將*start指向offset bytes之後的下一個位元組 skcull程式中有對read_proc的實作:

int scull_read_procmem(char *buf, char **start, off_t offset, int count, int *eof, void *data) { int i, j, len = 0; int limit = count - 80; /* Don't print more than this */ for (i = 0; i < scull_nr_devs && len <= limit; i++) { Scull_Dev *d = &scull_devices[i]; if (down_interruptible(&d->sem)) return -ERESTARTSYS; len += sprintf(buf+len,"\nDevice %i: qset %i, q %i, sz %li\n", i, d->qset, d->quantum, d->size); for (; d && len <= limit; d = d->next) { /* scan the list */ len += sprintf(buf+len, " item at %p, qset at %p\n", d, d->data); if (d->data && !d->next) /* dump only the last item - save space */ for (j = 0; j < d->qset; j++) { if (d->data[j]) len += sprintf(buf+len," % 4i: %8p\n",j,d->data[j]); } up(&scull_devices[i].sem); *eof = 1; return len;

定義好read_proc作業方式後,必須為它在/proc下設置一個入口點,使用create_proc_read_entry() 若希望使用者能透過/proc/scullmem取得該函式提供的資料,則driver需宣告如下: /proc入口點名稱 static void scull_create_proc() { create_proc_read_entry(“scullmem”, 0 /* 預設模式(0x444) */, NULL /* 上層目錄(*proc_dir_entry)*/, scull_read_procmem, NULL /* 提供給read_proc使用的資料 */); } 檔案權限 入口點上層目錄 read_proc作業方法的指標 傳給read_proc的資料的指標

第三引數的說明: •在/proc檔案系統下的每一個子目錄,都有各自專屬的proc_dir_entry結構來描述 •描述/proc/driver子目錄的結構為 proc_root_driver,描述/proc/bus子目錄的結構為proc_bus •若此引數設定為NULL,代表入口點設置在/proc目錄下

•在/proc子目錄下( /proc/driver)建立新入口點 static void scull_create_proc() { create_proc_read_entry(“scullmem”, 0 /* 預設模式(0x444) */, proc_root_driver/* 代表/proc/driver子目錄*/, scull_read_procmem, NULL /* 提供給read_proc使用的資料 */); }

建立新的/proc子目錄,利用proc_mkdir() struct proc_dir_entry *scull_procdir=NULL; static void scull_create_proc() { // 建立/proc/scull子目錄 scull_procdir=proc_mkdir(“scull”,NULL); create_proc_read_entry(“scullmem”,0,scull_procdir,scull_read_proc,NULL); }

在模組被載卸之前必須先移除相關的/proc入口點,使用remove_proc_entry() //移除 /proc/scullmem; remove_pcor_entry(“scullmem”,NULL); //移除 /proc/driver/scullmem; remove_proc_entry(“scullmem”,proc_root_driver); //移除 /proc/scull/scullmem; remove_proc_entry(“scullmem”,scull_procdir);

Ioctl作業方法 Ioctl()是作用在檔案描述單元(file descriptor)的一種系統呼叫,接受一個數值引數,一個可有可無的指標引數 數值引數--ioctl()所要執行的命令 指標引數--該命令的作業參數 •使用ioctl()來取得資訊,比較困難,因為要另外寫一個測試程式來發出呼叫,但是比讀取/proc的速度快 •沒有單記憶頁的限制,不必將資料拆解成片段 •不同於任何人都可見的/proc檔案,ioctl能將擷取除錯資訊的功能留在驅動程式裡面(因為不會影響效能) •詳情請待第五章

觀測除錯法 有時候,對於一些不太嚴重的小問題,用觀察user-space應用程式的行為,就可以察覺出來 將程式交給debugger來逐步執行 在適當地方印出訊息 將程式交給strace來執行

strace提供的除錯資訊,直接取自系統核心本身,能顯示出由user-space程式所發出的所有系統呼叫,輸入輸出資料是否一致 #strace ls /dev > /dev/scull0 strace最有用之處,在於能讓我們從系統呼叫中發現執行期的錯誤,一般應用程式中的perror()往往不夠詳細

排除重大系統錯誤 除了監視,除錯技術,驅動程式可能還是有很多意料之外的bug存在,嚴重可能造成system fault fault(失誤)不等於panic(死當),失誤通常會摧毀目前的行程,但是系統本身功能正常 若fault發生在process context之外,或是破壞系統的關鍵部分,就有可能造成panic oops訊息:往往發生在不當的操作指標所引起,如dereference(提領)或者是誤用指標的值

page fault:在protect mode(保護模式)下,所使用的是virtual address(虛擬記憶體),藉由page table換算出physical address(實體位置),若程式提領一個無效指標,分頁機制則沒有辦法算出實體位置,因而發生page fault 若在user-space發生提領無效,後果頂多是無法”page in“該位址 但若發生在kernel則迫使核心發出oops訊息

範例:misc-modules/faulty.c ssize_t faulty_write (struct file *filp, const char *buf, size_t count, loff_t *pos) { /* 提領一個NULL指標,刻意製造簡單的fault狀況*/ *(int *)0 = 0; return 0; } 0不是合理指標值

oops訊息包括 : fault當時CPU的狀態,包括各暫存器的值等… 但是~~看不懂那些十六進位的數字訊息,要想辦法把數字轉換成有意義的符號 klogd ( 自動轉換它所經手的核心訊息) ksymoops ( 必須靠使用者自己操作 )

klogd 必須先有目前核心的system.map符號表檔案( /boot 下) -p選項( paranoid謹慎 )啟動klogd,讓他每次收到oops訊息,都會重讀一次符號表

ksymoops system.map檔(-v) ( /usr/src/linux/system.map ) 模組清單(-l): ( /proc/modules ) 核心符號表(-k): ( /proc/ksyms ) 核心映像檔(-v): 模組object檔存放位置(-o):

指令: #ksymoops -v /usr/src/linux-2.4.20-8/vmlinux -m /usr/src/linux-2.4.20-8/Systme.map oops.txt

>>EIP; df8a90e3 <[faulty]faulty_write+3/14> <===== Trace; c0145de3 <sys_write+a3/9f0> Trace; c0109537 <__up_wakeup+1097/1470> Code; df8a90e3 <[faulty]faulty_write+3/14> 00000000 <_EIP>: Code; df8a90e3 <[faulty]faulty_write+3/14> <===== 0: c7 05 00 00 00 00 00 movl $0x0,0x0 <===== Code; df8a90ea <[faulty]faulty_write+a/14> 7: 00 00 00 Code; df8a90ed <[faulty]faulty_write+d/14> a: 31 c0 xor %eax,%eax Code; df8a90ef <[faulty]faulty_write+f/14> c: c9 leave Code; df8a90f0 <[faulty]faulty_write+10/14> d: c3 ret Code; df8a90f1 <[faulty]faulty_write+11/14> e: 8d 76 00 lea 0x0(%esi),%esi Code; df8a90f4 <[faulty]faulty_init+0/0> 11: 55 push %ebp Code; df8a90f5 <[faulty]init_module+1/44> 12: 89 e5 mov %esp,%ebp

除錯工具 GDB gdb /usr/src/linux/vmlinux /proc/kcore 反組譯 : (gdb) x/i <addr> Ex: (gdb) x/20i 0xc8002060 http://es-sun2.fernuni-hagen.de/cgi-bin/info2html?(gdb)Top

0xc8002060: push %ebp 0xc8002061: mov %esp,%ebp 0xc8002063: sub $0x8,%esp 0xc8002066: sub $0x,%esp 0xc8002069: push $0xc8002098 0xc800206e: call 0xc0114e50 <printk> 0xc8002073: add $0x10,%esp

KGDB補強程式 為了解決gdb在除錯核心時,不能發揮全部功能的遺憾 準備兩台電腦。一台跑經過kgdb補強過的受測核心,另一台跑gdb,兩台相連

CDA分析當機狀態資料 Crash dump analyzers讓系統發生故障時,能記錄下當時的系統狀態,以便我們事後分析故障原因 使用者不會抄寫oops訊息,我們可以事先安裝這套在他們的機器上

User-mode Linux移植版 ( 一種有趣的概念,並非在某種新型硬體平台上運行,而是在一個具備linux系統呼叫介面的虛擬機器上執行,適合讓設計師構思程式架構的雛形 ) Linux Trace Toolkit ( 回報時序資訊,可清楚某段時間內所發生的大小事情 ) Dynamic Probes ( IBM,特殊堆疊語法的探針,可回報訊息到user-space,改變暫存器內容 )

書中小錯誤 P104 倒數第五行 km”e”sg