日韩天堂,国产精品久久久久久久久久一区,羞羞羞网站,自拍视频网站,久久亚洲欧美成人精品,桃花阁成人网在线观看

Hello! 歡迎來(lái)到小浪云!


Linux后臺(tái)開發(fā)調(diào)試經(jīng)驗(yàn)分享


在這篇文章中,beck分享了他在linux后臺(tái)開發(fā)和調(diào)試領(lǐng)域的豐富經(jīng)驗(yàn)。作為一名從事c語(yǔ)言開發(fā)超過(guò)十年的從業(yè)者,他詳細(xì)介紹了調(diào)試的挑戰(zhàn)和方法,并強(qiáng)調(diào)了開發(fā)過(guò)程中的關(guān)鍵階段。

Linux后臺(tái)開發(fā)調(diào)試經(jīng)驗(yàn)分享作者:beck

畢業(yè)超過(guò)十年了,感慨歲月無(wú)情。作為一名從事后臺(tái)開發(fā)多年的從業(yè)者(之前在電信領(lǐng)域工作),我將分享一些常見的開發(fā)心得和調(diào)試手段。多年使用互聯(lián)網(wǎng)的經(jīng)歷讓我收獲頗豐,但總結(jié)的很少。秉承互聯(lián)網(wǎng)精神,希望我的經(jīng)驗(yàn)?zāi)軒椭交ヂ?lián)網(wǎng)另一端的你。由于我主要從事c語(yǔ)言開發(fā),以下經(jīng)驗(yàn)也是基于C語(yǔ)言的調(diào)試手段。

調(diào)試是一個(gè)復(fù)雜而令人困擾的問(wèn)題,很少有人能保證自己的代碼完全沒有錯(cuò)誤。一旦發(fā)現(xiàn)問(wèn)題,就需要進(jìn)行調(diào)試。調(diào)試方法多種多樣,從反匯編查看二進(jìn)制代碼,到使用gdb查看統(tǒng)計(jì)信息,再到簡(jiǎn)單的打印日志,甚至是自己制造bug讓別人來(lái)查。掌握這些方法后,總能找到適合自己的調(diào)試方式。

調(diào)試的最終目的是找到bug。一個(gè)高手曾打過(guò)一個(gè)有趣的比喻:你找BUG其實(shí)就像是福爾摩斯。你在BUG的“案發(fā)現(xiàn)場(chǎng)”尋找線索——合格的程序應(yīng)該有日志、dump內(nèi)存、計(jì)數(shù)等基本信息。如果什么都沒有,只能找寫代碼的人自己查。調(diào)試就是在眾多信息中抽絲剝繭,找到疑點(diǎn),反復(fù)推演程序運(yùn)行的代碼,最終定位到那幾行“作案”的代碼。

這個(gè)過(guò)程非常折磨人,沒有任何眉目時(shí),令人茶飯不思。但一旦找到問(wèn)題,就像打了雞血般興奮,甚至?xí)兆砥渲小V挥姓嬲?jīng)歷過(guò)這種折磨的人,才能體會(huì)到修改問(wèn)題的快感。

開發(fā)的程序通常要經(jīng)過(guò)兩個(gè)階段,最終才能上線發(fā)布。

在功能開發(fā)階段,主要目標(biāo)是根據(jù)業(yè)務(wù)需求開發(fā)程序。僅僅是寫if else嗎?寫程序絕不僅僅如此。如果只是這樣,開發(fā)人員的工作將變得更加枯燥和機(jī)械化。

做事都講究未雨綢繆,開發(fā)程序更應(yīng)該如此。大學(xué)C語(yǔ)言經(jīng)典教材中定義程序?yàn)椋撼绦?= 數(shù)據(jù)結(jié)構(gòu) + 算法。但在實(shí)際生產(chǎn)過(guò)程中,我認(rèn)為更合適的定義是:程序 = 數(shù)據(jù)結(jié)構(gòu) + 算法 + 業(yè)務(wù)邏輯(計(jì)算邏輯)+ 框架。

補(bǔ)充業(yè)務(wù)邏輯的原因是有意義的程序本身就是某種業(yè)務(wù)邏輯(計(jì)算邏輯)的抽象。完成這個(gè)業(yè)務(wù)邏輯才是最終目的,不要拿一些算法研究的代碼與我爭(zhēng)論。

作為開發(fā)人員,測(cè)試驅(qū)動(dòng)開發(fā)(tdd)是一種很好的思考問(wèn)題的方式。也許有人聽說(shuō)過(guò),也許有人用過(guò),如果你覺得使用效果不佳,我可以告訴大家:應(yīng)該采用測(cè)試場(chǎng)景 + 場(chǎng)景驅(qū)動(dòng)開發(fā)。是的,僅僅是加入“場(chǎng)景”這個(gè)賓語(yǔ),就能讓開發(fā)更有目的性和針對(duì)性。

任何一個(gè)業(yè)務(wù)邏輯都可以拆分為多個(gè)業(yè)務(wù)場(chǎng)景。逐一解決和測(cè)試這些場(chǎng)景,開發(fā)過(guò)程其實(shí)很簡(jiǎn)單。雖然聽起來(lái)簡(jiǎn)單,但整個(gè)過(guò)程需要50%的時(shí)間思考解決問(wèn)題場(chǎng)景,20%的時(shí)間編碼,30%的時(shí)間測(cè)試。思考問(wèn)題的50%的時(shí)間,可以在任何時(shí)間進(jìn)行(休息時(shí),地鐵上,班車上…),只要讓自己足夠靜,你就能將整個(gè)業(yè)務(wù)邏輯思考得非常清楚,分解為多個(gè)業(yè)務(wù)場(chǎng)景。對(duì)于復(fù)雜的業(yè)務(wù)場(chǎng)景,建議適當(dāng)做筆記,從全局的業(yè)務(wù)邏輯考慮:自己細(xì)化的結(jié)論是否符合所有的業(yè)務(wù)場(chǎng)景。反復(fù)修正,直到正確。

具體編碼時(shí),經(jīng)過(guò)前面的深思熟慮,每個(gè)細(xì)節(jié)都已經(jīng)很清楚了,可以采用迭代的方式,批量交付小的功能點(diǎn)。

開發(fā)階段的關(guān)鍵詞總結(jié)為:TDD + 迭代。需要更多詳情的同學(xué)可以自行百度谷歌

Linux后臺(tái)開發(fā)調(diào)試經(jīng)驗(yàn)分享在功能調(diào)試階段,調(diào)試手段有很多,包括走讀代碼、打日志、使用gdb、統(tǒng)計(jì)、coredump等,如果有精力也可以進(jìn)行白盒測(cè)試。測(cè)試的意圖很明確,就是確認(rèn)代碼是否按照正確的編碼意圖運(yùn)行。自己寫的代碼,調(diào)試起來(lái)相對(duì)容易,因?yàn)槟闱宄a的本意該如何運(yùn)行,現(xiàn)在出現(xiàn)了什么問(wèn)題。

程序員的三大悲劇之一,就是不知道什么時(shí)候需要定位其他人寫的bug。定位前必須理解另一位程序員寫這段代碼的意圖,否則無(wú)法進(jìn)行定位。理解其他人的代碼可以通過(guò)閱讀代碼了解大致思路,通過(guò)日志、gdb或統(tǒng)計(jì)信息補(bǔ)充代碼意圖的更多細(xì)節(jié),或者修正理解不對(duì)的思路。

這個(gè)過(guò)程可能很枯燥,也可能很有挑戰(zhàn),試圖通過(guò)種種跡象去了解另一位程序員寫代碼的初衷和意圖,有點(diǎn)像窺探人家的隱私!

以上說(shuō)的很多只是為了說(shuō)明調(diào)試的前提和初衷。一個(gè)優(yōu)秀的程序員會(huì)掌握很多調(diào)試技巧,也就是很多調(diào)試手段來(lái)獲取自己想要的信息。獲取的信息越多,就越容易理解程序本身的意圖。

調(diào)試工具的使用細(xì)節(jié)和說(shuō)明,讀者可以自行百度谷歌

以下是我簡(jiǎn)單闡述自己是如何調(diào)試程序的,以及如何理解各種工具的,歡迎各位大蝦指點(diǎn)交流:

1) 關(guān)于日志如何打好日志絕對(duì)是一門學(xué)問(wèn)。日志打印太多會(huì)影響后臺(tái)程序的性能,打印太少則無(wú)法定位問(wèn)題。更糟糕的是打印到空指針,可能導(dǎo)致程序coredump。

所以日志的技巧是:少,且內(nèi)容豐富。

如何做到少,就是匯聚。

能否將表達(dá)同一個(gè)意思的打印減少?

能否在關(guān)鍵異常的地方加上統(tǒng)計(jì)(輸出統(tǒng)計(jì))?

能否不打?

能否在內(nèi)存中記錄關(guān)鍵信息,在需要時(shí)控制其打印時(shí)機(jī)?

如何做到內(nèi)容豐富,就是少打描述性詞匯,多打有用的程序運(yùn)行信息。

方法很多,大家多多思考。并且打印的優(yōu)化是一個(gè)反復(fù)優(yōu)化的過(guò)程,不是馬上就能完成的。曾經(jīng)遇到過(guò)一個(gè)大牛,測(cè)試部提出問(wèn)題時(shí),他從不親自定位,而是直接讓測(cè)試的兄弟執(zhí)行軟調(diào),將收集的日志給他分析就能解決問(wèn)題。

2) 關(guān)于gdb有大牛說(shuō)過(guò):“我就是程序,程序就是我”。我常用gdb來(lái)檢驗(yàn)自己對(duì)程序的理解。常用的gdb功能包括打印程序運(yùn)行信息,修改一些內(nèi)部運(yùn)行信息,構(gòu)造復(fù)雜場(chǎng)景。

其實(shí)很簡(jiǎn)單,程序在什么場(chǎng)景下應(yīng)該有什么樣的行為,我自己必須清楚。必須知道關(guān)鍵變量的信息是否正確,周期性地使用gdb確認(rèn)變量的信息是否正確,然后決定程序是否符合預(yù)期在執(zhí)行。

可靠的程序都有類似的保護(hù)機(jī)制,但通常需要繁瑣地構(gòu)造測(cè)試條件來(lái)觸發(fā)這些機(jī)制(如檢測(cè)到丟包率很高,要告警等)。大多數(shù)保護(hù)機(jī)制都是通過(guò)記錄一些狀態(tài)后觸發(fā)的。

其實(shí),可以使用gdb構(gòu)造出異常狀態(tài),確認(rèn)告警機(jī)制是否生效。gdb很好地補(bǔ)充了這方面的測(cè)試和驗(yàn)證工作。

3) 關(guān)于統(tǒng)計(jì)統(tǒng)計(jì)信息是關(guān)鍵信息匯集的最好例子。數(shù)據(jù)少,信息明確。

在電信軟件中,很多模塊都通過(guò)這樣的信息來(lái)“自證清白”,也很容易發(fā)現(xiàn)問(wèn)題出現(xiàn)在哪里。

統(tǒng)計(jì)的實(shí)質(zhì)是通過(guò)全局變量記錄程序正常和異常點(diǎn)的統(tǒng)計(jì)信息,然后通過(guò)某種手段輸出出來(lái)。

4) 關(guān)于coredump大家看到coredump都會(huì)頭痛,但coredump也是很好的定位手段。

首先,程序coredump后,會(huì)生成詳細(xì)的coredump文件,該文件詳細(xì)記錄了程序在core之前的運(yùn)行信息。使用gdb加載這個(gè)coredump文件,你想看什么都可以。這只是簡(jiǎn)單地使用coredump。

如果遇到復(fù)雜的問(wèn)題,難搞的問(wèn)題,也可以使用coredump來(lái)定位。

比如程序執(zhí)行到一個(gè)十分不常見的代碼分支,然后就core掉了,但目前的輸出信息(如日志等)無(wú)法進(jìn)一步定位問(wèn)題。

怎么辦?有沒有想過(guò)在復(fù)現(xiàn)問(wèn)題的環(huán)節(jié),出一個(gè)調(diào)試版本的程序,在異常分支上主動(dòng)觸發(fā)內(nèi)存異常,產(chǎn)生coredump,利用coredump信息來(lái)確定程序是如何異常的。

5) 關(guān)于代碼修改這也是我常用的手段之一,反復(fù)對(duì)比修改前后的代碼,確認(rèn)修改代碼的準(zhǔn)確性和全面性,反思自己代碼修改是否全面?這里面用到的工具就是beyondcompare。

從事編程多年,偶有所得,記錄于此,希望各位有所收獲!

相關(guān)閱讀

主站蜘蛛池模板: 亚洲国产精品午夜电影 | 色的视频在线观看免费播放 | 最近中文字幕无吗免费高清 | 自偷自拍亚洲欧美清纯唯美 | 婷婷五色月 | 深爱激动网婷婷狠狠五月 | 亚洲国产福利精品一区二区 | 九九在线免费视频 | 男女做羞羞的网站视频 | 六月丁香伊人 | 国产精品久久亚洲一区二区 | 羞羞视频免费网站入口 | 色爱区综合激情五月综合激情 | 亚洲视频在线观看免费 | 亚洲日韩精品欧美一区二区 | 四虎永久免费观看 | 亚洲一区二区精品视频 | 亚洲精品在线看 | 免费在线色视频 | 婷婷激情狠狠综合五月 | 在线视频国产网址你懂的在线视频 | 免费两性的视频网站 | 五月激情六月 | 日韩亚洲欧美综合 | 亚洲欧美日韩久久一区 | 成人不卡 | 亚洲午夜久久久久久91 | 亚洲精品成人a在线观看 | 国产亚洲一欧美一区二区三区 | 亚洲69| 色婷婷六月丁香七月婷婷 | 亚洲人成网站观看在线观看 | 毛片在线免费视频 | 性强烈的欧美三级三p视频 一级电影免费 | 精品久久久久久中文字幕欧美 | 亚洲国产成人久久综合区 | 国产成人一区二区三区在线视频 | 中文字幕avdvd| 丁香婷婷成人 | 一级电影免费观看 | 在线观看视频你懂得 |