本文示例源代碼或素材下載
開始之前
本教程幫助 Unix 系統(tǒng)開發(fā)人員和管理員以最佳方式跟蹤系統(tǒng)上運(yùn)行的應(yīng)用程序 。要想從本教程獲得最大收獲,您應(yīng)該了解 UNIX 操作系統(tǒng)的基本知識及其操作方式 。具備基本的編程經(jīng)驗(yàn)會有幫助,但不是必需的 。
關(guān)于本教程
大多數(shù)開發(fā)人員和系統(tǒng)管理員知道在他們的操作系統(tǒng)和應(yīng)用程序中應(yīng)該會發(fā)生什么情況,但糟糕的是,有時(shí)候不是這樣的 。當(dāng)應(yīng)用程序崩潰或表現(xiàn)異常時(shí),需要查明更多信息 。通過利用對應(yīng)用程序正常工作方式的了解和一些基本 UNIX 技能,可以跟蹤應(yīng)用程序,查明造成問題的原因 。本教程講解使用跟蹤工具了解應(yīng)用程序內(nèi)部情況的基本技術(shù) 。
本教程首先討論調(diào)試和跟蹤的差異,以及這兩種解決方案的工作方式差異 。然后,通過一些具體示例講解如何使用跟蹤解決應(yīng)用程序中的問題 。DTrace 提供跟蹤和調(diào)試兩種系統(tǒng)的組件,還支持對應(yīng)用程序進(jìn)行計(jì)時(shí)和基準(zhǔn)測試 。最后,本教程講解如何跟蹤在網(wǎng)絡(luò)計(jì)算機(jī)之間交換的信息,幫助發(fā)現(xiàn)網(wǎng)絡(luò)應(yīng)用程序中的問題 。
跟蹤概述
有時(shí)候,需要了解在應(yīng)用程序內(nèi)部正在發(fā)生的情況 。例如,應(yīng)用程序可能會運(yùn)行失敗,而又沒有顯示有幫助的錯(cuò)誤消息,或者系統(tǒng)服務(wù)沒有按照預(yù)期的方式運(yùn)行 。在這些情況下,您可能不掌握應(yīng)用程序源代碼,因此無法通過傳統(tǒng)的調(diào)試過程尋找問題的原因 。跟蹤提供了一種替代方法 。
調(diào)試
對于開發(fā)人員來說,尋找 UNIX 應(yīng)用程序問題的主要方法是,使用開發(fā)環(huán)境或操作系統(tǒng)的調(diào)試特性檢查源代碼,查明造成問題的原因 。
大多數(shù)調(diào)試系統(tǒng)支持逐行監(jiān)視和檢查代碼行的執(zhí)行過程,還支持監(jiān)視變量和結(jié)構(gòu)的值 ??梢允褂谜{(diào)試器在代碼中設(shè)置斷點(diǎn),執(zhí)行過程會停在斷點(diǎn)上;在斷點(diǎn)上,可以獲得關(guān)于調(diào)用堆棧(函數(shù)的調(diào)用路徑)的信息以及變量值 。
我們來看一個(gè)例子,假設(shè)一個(gè)應(yīng)用程序根據(jù)人的生日計(jì)算他的年齡,還要考慮到閏年等因素 。要想調(diào)試這個(gè)應(yīng)用程序,需要有源代碼,還需要在啟用調(diào)試選項(xiàng)的情況下編譯應(yīng)用程序:$ gcc -g ageindays.c -o ageindays 。
運(yùn)行這個(gè)應(yīng)用程序,提供用戶的生日和用來比較的目標(biāo)日期(見清單 1) 。
清單 1. 執(zhí)行比較
$ ./ageindays 24/1/1980 22/2/2009
You have been alive 10622 days
You were born on 24/1/1980 which is a Thursday
在調(diào)試應(yīng)用程序時(shí),首先懷疑問題出在 calc_diff 函數(shù)中,這個(gè)函數(shù)計(jì)算第一個(gè)和第二個(gè)日期的差 。接下來,可能按照清單 2 這樣進(jìn)行調(diào)試 。
清單 2. 調(diào)試 calc_diff 函數(shù)
$ gdb ageindays
GNU gdb 6.3.50-20050815 (Apple version gdb-962) (Sat Jul 26 08:14:40 UTC 2008)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copIEs of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-apple-darwin"...Reading symbols for shared
libraries ... done
(gdb) b calc_diff
Breakpoint 1 at 0x1bd7: file ageindays.c, line 27.
(gdb) r 24/1/1980 26/3/2009
Starting program: /nfs/MC/UnixSrc/c/bio/ageindays 24/1/1980 26/3/2009
Reading symbols for shared libraries. done
Breakpoint 1, calc_diff (day=26, month=3, year=2009) at ageindays.c:27
推薦閱讀
- UNIX操作系統(tǒng)復(fù)雜的關(guān)機(jī)過程
- Unix文件名與Windows文件名的差異
- Unix中利用轉(zhuǎn)義和引用來管理元字符
- 自動殺死Unix僵死的進(jìn)程
- Unix操作系統(tǒng)中處理字符串問題的簡單方式
- SCO unix三種安裝BTLD的方式
- UNIX及SYBASE的安裝
- 在Sco Unix下?lián)芴柹暇W(wǎng)
- 如何自動殺死UNIX僵死的進(jìn)程
- 下 HP 服務(wù)器安裝 SCOUNIX 5.0.4/5
