日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

程序调试的利器日志

發(fā)布時間:2025/6/15 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 程序调试的利器日志 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.



? 如果世界上有一個人能夠保證一次寫出來的代碼是百分之百正確的,那么毫無疑問,他一定是世界上最優(yōu)秀的程序員,沒有之一。為什么要求代碼寫好過后要進行充分的自測(包括單元測試和集成測試)?就因為是人皆會犯錯,使程序就會有bug。作為一名軟件開發(fā)人員,必須要學(xué)會對程序進行測試,也就是要學(xué)會程序的調(diào)試。

??????? 一般而言,對代碼的調(diào)試有以下幾種方法:

??????? 第一,憑肉眼看。在開發(fā)階段,我們編寫的每一行代碼都需要用我們的“火眼金睛”多審查幾遍。如果要問,最好的代碼調(diào)試工具是什么?我認為是人眼。不管是代碼還是文檔,在用工具檢查之前,都需要先過了我們眼睛這一關(guān)。

??????? 第二,對代碼進行編譯,以發(fā)現(xiàn)語法錯誤。編譯器能夠幫助我們發(fā)現(xiàn)代碼中存在的語法錯誤,但對于那些隱蔽性的錯誤(如邏輯錯誤等)無能為力。

??????? 第三,用代碼檢查工具(Pclint)來走查代碼。如果代碼編譯通過,并不表示它就沒有問題了。在學(xué)校的時候,我們一般認為只要程序能夠運行就可以了。但在實際的軟件開發(fā)項目中,程序能夠跑起來,只是“萬里長征走完了第一步”。用代碼檢查工具可以發(fā)現(xiàn)很多編譯器無法發(fā)現(xiàn)的錯誤,如變量定義了未引用、不同數(shù)據(jù)類型之間相互賦值、函數(shù)未聲明便被調(diào)用等。

?????? 第四,對代碼進行調(diào)試。對于運行正常而輸出結(jié)果不正確的程序,我們可以用設(shè)置斷點并進行單步跟蹤調(diào)試的方法來發(fā)現(xiàn)其中存在的問題。例如,在VC++ 6.0里面,可實現(xiàn)對代碼的單步調(diào)試,并輸出變量在某一步產(chǎn)生的值,可據(jù)此判斷程序的邏輯的正確與否。

???????第五,對程序的日志文件進行分析。對代碼的單步調(diào)試只在代碼行數(shù)較少的時候比較適用,如學(xué)校教材上面的程序。但在實際的軟件項目中,代碼少則幾千行,多則數(shù)萬行,用單步調(diào)試的方法顯然不恰當(dāng)。為了跟蹤某一變量值的變化,用該方法可能要花費幾個小時,這對工作效率產(chǎn)生了嚴重影響。為了解決大程序文件代碼調(diào)試問題,日志系統(tǒng)應(yīng)運而生。在程序中的重要地方打印日志,之后對產(chǎn)生的日志進行分析,可找到對應(yīng)代碼的問題。因此,日志文件分析成了大型軟件項目中代碼調(diào)試的主要手段。

?????? 本文對日志相關(guān)內(nèi)容進行詳細的說明。

?

1.?什么是日志文件?

??????? 在業(yè)務(wù)軟件系統(tǒng)中大量使用日志,日志能夠起到“按圖索驥”的作用,它對于故障定位和系統(tǒng)正常運行維護具有舉足輕重的作用。

?????? 日志文件是程序中寫日志函數(shù)產(chǎn)生的記錄程序執(zhí)行情況的文件。寫日志函數(shù)也是用C語言編寫的,同C函數(shù)一樣被調(diào)用。在恰當(dāng)?shù)牡胤秸{(diào)用該函數(shù),可對整個程序的運行狀況有一個全面的了解,方便對程序的跟蹤調(diào)試。

?

2.?有關(guān)日志等級和日志配置說明

(1)?日志等級

??????? 事有輕重緩急,日志信息也有重要與不重要之分。一般按照重要程度,將日志等級分為幾類。在作者參與過的軟件開發(fā)項目中,共有7個等級,用宏定義表示如下:

//?日志等級定義

#define LOG_FATAL????? ??(int)1???? //?嚴重錯誤

#define LOG_ERROR?????? (int)2???? //?一般錯誤

#define LOG_WARN??????? (int)3???? //?警告信息

#define LOG_INFO????? ???(int)4???? //?一般信息

#define LOG_TRACE?????? (int)5???? //?跟蹤信息

#define LOG_DEBUG????? ?(int)6???? //?調(diào)試信息

#define LOG_ALL?????? ???(int)7???? //?全部

????? 開發(fā)人員根據(jù)所要打印的日志的具體情況采用不同的日志等級。

?

(2)?日志配置

??????? 由于不同產(chǎn)品程序行數(shù)、部署情況、實現(xiàn)功能等的差別,對日志打印的要求也不盡相同,因此需要有配置來控制日志的產(chǎn)生數(shù)量和顯示情況。

?????? 在配置文件中,有一個專門的[LOG]配置段,其中的配置項如下:

[LOG]

;日志等級, 0-Fatal 1-Error 2-Warn 3-Info 4-Trace 5-Debug 6-All

LogLevel=

;每個日志文件的最大容量

LogMaxSize=

;是否輸出該條日志在代碼中的行數(shù), 1-Yes 0-No

LogPosition=

??????? 其中,LogLevel用于控制打印日志的等級,代碼中日志等級比配置值大的日志信息均不在日志文件中顯示;LogMaxSize用于控制生成一個日志文件的大小的上限,超過該值后,便重新生成文件;LogPosition用于控制是否在日志文件中顯示代碼行數(shù),方便將日志與代碼對應(yīng)起來。

?

3.?如何調(diào)用寫日志函數(shù)?

?????? ?日志函數(shù)的調(diào)用遵循一般函數(shù)的調(diào)用規(guī)則。有兩類寫日志函數(shù),如下所示:

??????? (1)?第一類形如:WriteLog(LogLevel, LogInfo)。其中,參數(shù)LogLevel指日志等級(見第2節(jié)中的說明);參數(shù)LogInfo是具體要打印的日志信息,我們據(jù)此信息來檢查程序的運行情況。該函數(shù)的調(diào)用示例如:WriteLog(LOG_INFO, "The value of this integer is 3."),日志等級為LOG_INFO,日志信息為“The value of this integer is 3.(該信息會輸出到日志文件中)

?

?????? (2)?第二類形如:WriteLogEx(LogLevel, LogInfo, ParaInfo)。這是擴展的日志函數(shù),不但能夠輸出日志信息,還能夠在日志信息中顯示變量的值。該函數(shù)的調(diào)用示例如:WriteLogEx(LOG_INFO, "The value of integer iInt is %d.", iInt),該日志要輸出整型變量iInt的值,可以將該函數(shù)的調(diào)用與printf函數(shù)的調(diào)用比較起來看(可以認為WriteLogEx函數(shù)只是在printf函數(shù)中增加了一個日志等級參數(shù))

?

4.編寫日志的基本原則、基本要求和位置要求

????? 日志編寫的總體原則是簡單清晰、便于排查問題。

(1)?日志編寫的基本原則

????? 1)?顯式輸出,關(guān)鍵信息必須輸出;

????? 2)?在編碼時使用正確的日志級別,error錯誤和warning錯誤必須反應(yīng)出實在的含義,不是特別嚴重的問題不能將日志等級定義為LOG_FATAL

????? 3)?在寫日志描述時,要使用正常簡單易懂的語言,不能使用晦澀難懂的語言或某些專業(yè)術(shù)語;

????? 4)?在極少數(shù)特殊情況不希望用戶知道時,可使用特殊日志標(biāo)記;

????? 5)?為了寫出優(yōu)美的代碼,在自己修改或添加代碼的地方,都要正確的打上標(biāo)記(包括作者、日期信息等),方便追蹤版本的演進情況。

?

(2)?日志編寫的基本要求

????? 1)?分多條信息分別輸出,不要企圖一次將所有信息打印出來;

????? 2)?分時輸出;

????? 3)?必須分日志級別,這樣可根據(jù)等級迅速對日志進行分析;

????? 4)?控制日志信息的條數(shù),不重要的信息盡量不要打印日志。

?

(3)?輸出日志的位置要求

??? 1)?所有的輸入輸出,包括收消息和發(fā)消息都要求輸出日志;

??? 2)?關(guān)鍵控制點必須輸出日志;

??? 3)?調(diào)用底層或第三方軟件,必須輸出日志,而且對不可靠底層,必須加上begin/end兩行日志;

? ? 4)?對方系統(tǒng)處理時間必須輸出日志,以利以后維護時快速定位性能問題。

?

??? 此外,作者認為,在編寫日志時還需要注意以下幾點:

??? 1) 在編寫日志時需要注重日志細節(jié),目標(biāo)是為了方便以后維護,在遇到問題時,可以快速定位問題。

??? 2) 不要在同一行中寫意思重復(fù)的日志。

??? 3) 日志需要足夠的精簡,不要隨意換行。

??? 4) 日志中字段之間可以用空格或其它符號分斷,不能將日志一直連續(xù)而不將其分斷,盡量使日志本身具備進行“識文斷句”的能力。

??? 5) 對于日志中的特殊信息(如會話號、IP地址等),用特殊的符號進行標(biāo)識,其主要目的是為了便于搜索。

?

5.總結(jié)

??????? 日志系統(tǒng)在軟件程序中占有非常重要的地位,日志文件是排查程序問題的主要工具,是程序調(diào)試的利器。作為一名合格的軟件開發(fā)工程師,一定要學(xué)會日志函數(shù)的靈活調(diào)用及準(zhǔn)確通過日志文件來定位程序問題。

????? “實踐出真知”,只有通過不斷的積累和總結(jié),才會對日志有更全面的認識。


總結(jié)

以上是生活随笔為你收集整理的程序调试的利器日志的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。