亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1472 | 回復(fù): 3
打印 上一主題 下一主題

關(guān)于錯誤處理(歡迎進(jìn)來一起討論) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2006-08-02 19:05 |只看該作者 |倒序?yàn)g覽
是這樣的,目前正在實(shí)現(xiàn)一個庫:
o 這個庫是C語言實(shí)現(xiàn)的,提供C語言接口(注意:是C語言,所以就不要考慮拋出異常了)
o 這個庫是跨平臺的──至少可以是POSIX和windows上通用的

現(xiàn)在遇到的一個問題,其實(shí)是一個再簡單不過的問題了:錯誤處理

簡單說來,錯誤處理的方法可以概括成:

  1. if( encounter_error(...) )
  2.         error(...);
復(fù)制代碼


于是問題也就集中在這個error函數(shù)上面了。這個函數(shù)究竟該怎么實(shí)現(xiàn),實(shí)現(xiàn)成什么樣子呢?

一般情況是有這么幾種的:

o 像W. Richar Stevens的那個錯誤處理庫一樣,把錯誤信息輸出到標(biāo)準(zhǔn)錯誤輸出或者日志中,然后結(jié)束進(jìn)程或者返回。
但是這種方法在我這里存在幾個問題:

* 因?yàn)閷?shí)現(xiàn)的是一個庫,所以把錯誤信息打印到標(biāo)準(zhǔn)錯誤輸出上顯然不是很恰當(dāng)。例如:假如這個庫被用在了一個GUI程序中,那么如果程序出現(xiàn)錯誤,最好的方式應(yīng)該是輸出一個錯誤提示框,而不是把錯誤輸出到console下
* 如果把錯誤信息輸出到日志文件,似乎要比打印到標(biāo)準(zhǔn)錯誤輸出上好些。但是同樣存在以上的問題:對于一個GUI程序來說,錯誤信息最好是可以以一個窗口(錯誤提示框)的形式發(fā)給用戶。簡單地輸出到一個文件中用戶會覺得十分不友好
* 很多情況下很難判斷究竟是結(jié)束進(jìn)程還是返回。例如:對于一個只維護(hù)一個連接的客戶端來說,如果這個連接在connect的時候失敗,那么進(jìn)程就完全可以這樣結(jié)束了。但是如果對于一個需要維護(hù)多個連接的程序來說,在其中一個connect失敗的時候就結(jié)束進(jìn)程顯然不是很好。換句話說,究竟是結(jié)束進(jìn)程還是返回,最好由上層的調(diào)用來判斷,而非庫本身

o errno模式。也就是說,這個庫提供一個函數(shù),類似winsock的那個WSAGetLastError一樣,在錯誤發(fā)生時,將錯誤信息存儲在一個errno中,用戶可以在查覺到錯誤發(fā)生之后,調(diào)用這個函數(shù),根據(jù)函數(shù)返回值,調(diào)用一個類似strerror的函數(shù),獲得錯誤描述。其實(shí)我認(rèn)為這個做法是比較理想的,但是在實(shí)現(xiàn)的時候卻遇到了幾個問題:
* 并非所有的錯誤都可以在函數(shù)調(diào)用之后處理的。例如調(diào)用getaddrinfo之后,如果調(diào)用失敗,可以將返回值作為參數(shù)調(diào)用gai_strerror來獲得錯誤信息。可是這個函數(shù)在windows上是不存在的。而且,getaddrinfo的返回值究竟保存在什么地方,才能讓它在用戶調(diào)用一個獲得錯誤信息函數(shù)(類似strerror)時得到這個值并且是線程安全的?
* 不知道windows上的errno值和UNIX上的是否一一對應(yīng),如果不是,用戶則又要根據(jù)不同的系統(tǒng)編寫自己的錯誤處理代碼了。這樣的話整個庫的跨平臺特性就沒有任何意義了。

除此以外似乎還有一些問題,不過還沒有整理好思路,暫時不說了?傊,各位有什么好得方法來進(jìn)行錯誤處理呢?歡迎大家提供好的意見和建議。多謝了。

[ 本帖最后由 默難 于 2006-8-2 19:06 編輯 ]

論壇徽章:
0
2 [報告]
發(fā)表于 2006-08-02 19:29 |只看該作者
可以做成一種錯誤注冊的形式,你可以通過命令行觀看日志,也可以通過界面查詢,不過這種好像就要做一個錯誤日志的服務(wù)器。這是我的一點(diǎn)兒想法

論壇徽章:
0
3 [報告]
發(fā)表于 2006-08-02 19:33 |只看該作者
可是我目前要實(shí)現(xiàn)的是一個庫。而非一個程序
這個庫是跨平臺的。如果加入一個日志查詢的功能……那實(shí)現(xiàn)的可就不僅僅是一個庫那么簡單了

論壇徽章:
1
榮譽(yù)版主
日期:2011-11-23 16:44:17
4 [報告]
發(fā)表于 2006-08-02 19:45 |只看該作者
自己定義錯誤代碼,
函數(shù)出錯了,就給調(diào)用者返回錯誤碼,
具體調(diào)用者怎么處理,你不用管。
因?yàn)槟悴恢勒{(diào)用者會怎么處理,
正如你說的,在GUI情況下,他想拋出一個對話框。
又或者他想寫LOG,
這個不應(yīng)該是庫的責(zé)任。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP