为什么要学习C++软件调试技术?掌握这类技术都有哪些好处?
目錄
1、為什么要學習C++軟件調(diào)試技術(shù)?
1.1、IDE調(diào)試手段雖必不可少,但還不夠
1.2、通過查看日志和代碼去排查異常崩潰問題,費時費力,很難定位問題
1.3、有的問題很難復現(xiàn),可能只在客戶的環(huán)境才能復現(xiàn)
1.4、開發(fā)聯(lián)調(diào)工期有限,必須在短時間內(nèi)快速定位并解決問題
1.5、為了應(yīng)對軟件在不同環(huán)境中出現(xiàn)的各式各樣的問題,我們需要掌握足夠多的調(diào)試排查技術(shù)
1.6、掌握高效的調(diào)試分析技術(shù),既能提升個人能力,也能體現(xiàn)個人價值
2、C++軟件調(diào)試技術(shù)的主體內(nèi)容
3、掌握C++軟件調(diào)試技術(shù)都有哪些好處?
3.1、在了解引發(fā)異常的常見原因后,在編寫代碼時更小心
3.2、匯編語言接觸的多了,能更好地理解軟件底層的運行機制
3.3、排查問題的經(jīng)驗多了,處理新問題就更加得心應(yīng)手了
3.4、在排查問題的過程中,可以主動地去發(fā)掘?qū)W習的機會,去擴充自己的視野
3.5、在問題中進步,在問題中總結(jié)
3.6、通過排查問題去積累素材,可以用到日常的技術(shù)分享與培訓中
4、學習軟件調(diào)試技術(shù)的經(jīng)歷與心得分享
4.1、學習軟件調(diào)試技術(shù)經(jīng)歷分享
4.2、做技術(shù)分享的一些心得
VC++常用功能開發(fā)匯總(專欄文章列表,歡迎訂閱,持續(xù)更新...)https://blog.csdn.net/chenlycly/article/details/124272585C++軟件異常排查從入門到精通系列教程(專欄文章列表,歡迎訂閱,持續(xù)更新...)https://blog.csdn.net/chenlycly/article/details/125529931? ? ? ?通過技術(shù)分享和線下交流發(fā)現(xiàn),很多C++程序員在軟件調(diào)試技術(shù)這一塊都比較欠缺,無論是剛畢業(yè)的新手,還是工作多年的老員工。這里面有個人的原因,也有環(huán)境的原因。考察一個軟件人員的水平,一是要看編碼與架構(gòu)的設(shè)計能力,二是要看軟件調(diào)試能力。軟件調(diào)試能力在處理項目上線后遇到的各式各樣的問題時顯得尤為重要。今天我們就來詳細聊一下為什么要學習C++軟件調(diào)試技術(shù),以及學習C++軟件調(diào)試技術(shù)有哪些好處。
1、為什么要學習C++軟件調(diào)試技術(shù)?
? ? ? ?在項目上線后,為了有效地應(yīng)對軟件使用過程中遇到的各式各樣的問題,我們需要掌握多種軟件調(diào)試手段和方法,要掌握常用的軟件調(diào)試技巧,僅靠單一的技能是遠遠不夠的。
1.1、IDE調(diào)試手段雖必不可少,但還不夠
? ? ? ?我們在項目開發(fā)聯(lián)調(diào)階段,會使用IDE進行Debug調(diào)試,將軟件的基本流程和功能調(diào)通。由于Debug和Release下的差異,有些在Release版本出的問題,在Debug下是沒有的,沒法通過Debug調(diào)試去解決的。
? ? ? ? 對于有些好復現(xiàn)的問題,我們還可以進行Release下的調(diào)試。IDE調(diào)試是我們處理問題的最直接、最基本的手段,但IDE調(diào)試不能覆蓋所有的場景,比如產(chǎn)品進入測試或發(fā)布上線后,有些問題是很難復現(xiàn)的,在Debug下也是很難復現(xiàn)的,所以沒法通過Debug調(diào)試去排查。
? ? ? ?產(chǎn)品上線到客戶環(huán)境后遇到了問題,基本是不可能到客戶的環(huán)境中去調(diào)試代碼的。所以僅僅依靠IDE調(diào)試去排查問題,是遠遠不夠的。
1.2、通過查看日志和代碼去排查異常崩潰問題,費時費力,很難定位問題
? ? ? ?軟件的運行日志是我們排查問題的重要手段。軟件中的異常主要包括兩大類:業(yè)務(wù)上的異常和軟件異常崩潰。
? ? ? ?對于業(yè)務(wù)上的異常,可以通過打印日志去排查,在日志中查看軟件的運行流程,還可以查看到相關(guān)變量的值,還可以結(jié)合抓網(wǎng)絡(luò)包去分析。
? ? ? ?但對于軟件異常崩潰,在排查手段與方法上,與業(yè)務(wù)上的異常排查有很大的不同,一般僅通過日志打印去排查是行不通的,日志中沒法找到軟件崩潰點,很難找到引發(fā)軟件崩潰的線索。日志不是排查軟件異常崩潰的主要手段,日志僅僅起到輔助的作用,比如我們在找到軟件崩潰點及崩潰時的函數(shù)調(diào)用堆棧后,可以通過日志去查看代碼的運行流程及相關(guān)變量值去輔助分析引發(fā)崩潰的原因。
1.3、有的問題很難復現(xiàn),可能只在客戶的環(huán)境才能復現(xiàn)
? ? ? ?有的軟件異常問題很難復現(xiàn),可能只能在客戶的網(wǎng)絡(luò)環(huán)境或者PC機器的軟硬件環(huán)境中才能復現(xiàn)。對于這類問題,一般我們需要使用多種手段和方法去排查,沒法通過IDE調(diào)試去解決。
? ? ? ?如果軟件有捕獲到異常,生成了包含異常上下文的dump文件,我們可以取來dump文件用Windbg或gdb等調(diào)試器進行分析。如果沒有生成dump文件,一般需要使用調(diào)試器在客戶環(huán)境中進行動態(tài)調(diào)試,嘗試去捕獲異常信息。
? ? ? ?但在客戶的機器上去動態(tài)調(diào)試有諸多的不便,比如問題很難復現(xiàn),需要很多的時間去復現(xiàn),這樣就會耽誤客戶很多的時間;有些安全等級比較高的涉密客戶,是不允許在其機器上安裝Windbg調(diào)試器等軟件的。所以有時我們可以嘗試在公司的環(huán)境中去復現(xiàn)問題,可能在長時間的拷機后可能會復現(xiàn)。
1.4、開發(fā)聯(lián)調(diào)工期有限,必須在短時間內(nèi)快速定位并解決問題
? ? ? ?當項目處于功能聯(lián)調(diào)階段,發(fā)生異常崩潰處的代碼很關(guān)鍵,是業(yè)務(wù)初始必經(jīng)之處,此處出問題,這塊業(yè)務(wù)就沒法繼續(xù)聯(lián)調(diào),如果項目工期有限,不能在這個問題上耗費太多的時間,需要盡快排查出來。
? ? ? ?還有一種場景,為了項目競標(打標),需要在一兩天或較短時間內(nèi)開發(fā)出一個新功能,時間非常有限,如果在測試時遇到異常崩潰,需要快速解決問題。
1.5、為了應(yīng)對軟件在不同環(huán)境中出現(xiàn)的各式各樣的問題,我們需要掌握足夠多的調(diào)試排查技術(shù)
? ? ? ?為了應(yīng)對軟件在不同環(huán)境中出現(xiàn)的各式各樣的問題,對問題做出快速的響應(yīng),我們要了解引發(fā)軟件異常的常見原因,要知悉一些問題排查的手段與方法,要熟練使用各種常用的分析工具和調(diào)試工具。對于一些復雜的問題,需要將多種方法和手段結(jié)合起來,使用多種工具去聯(lián)合分析。
? ? ? ?但掌握這些知識和技能不是一撮而就的事情,需要腳踏實地來學習,然后把學到的東西應(yīng)用到實際的項目中,要多動手多實踐,在問題中取得進步,在問題中積累經(jīng)驗。
1.6、掌握高效的調(diào)試分析技術(shù),既能提升個人能力,也能體現(xiàn)個人價值
? ? ? ?掌握高效的調(diào)試分析技術(shù)后,可以處理各式各樣的軟件疑難問題,在處理問題的過程中個人能力和經(jīng)驗都能得到有效地提升。具備別人不具備的軟件調(diào)試能力,能解決別人搞不定的問題,這樣能更好地體現(xiàn)出對企業(yè)的價值,這同時也是個人價值的體現(xiàn)。
2、C++軟件調(diào)試技術(shù)的主體內(nèi)容
? ? ? ? 通過大量的項目實戰(zhàn)總結(jié)出來的C++調(diào)試技術(shù)的主要內(nèi)容如下:
?這個地方我就不再贅述了,C++調(diào)試技術(shù)的詳細內(nèi)容可以去查看專欄《C++軟件調(diào)試與異常排查從入門到精通》:
C++軟件調(diào)試與異常排查從入門到精通專欄https://blog.csdn.net/chenlycly/article/details/125529931
3、掌握C++軟件調(diào)試技術(shù)都有哪些好處?
? ? ? ?掌握大量的軟件調(diào)試技術(shù)之后,最直接的好處就是能高效地排查項目中遇到的各式各樣的難題,下面我們來詳細看看都有哪些具體的好處。
3.1、在了解引發(fā)異常的常見原因后,在編寫代碼時更小心
? ? ? ?在系統(tǒng)地了解引發(fā)C++軟件異常的常見原因之后,能讓我們在編寫代碼時考慮的更加謹慎、更加全面,從一開始就把一些問題給規(guī)避掉,將問題扼殺在搖籃中。
3.2、匯編語言接觸的多了,能更好地理解軟件底層的運行機制
? ? ? ?有時我們在排查軟件異常時,特別是在缺乏pdb符號庫文件時,我們需要用IDA查看相關(guān)二進制文件的匯編代碼上下文去分析。這樣就會接觸很多底層的匯編代碼,匯編代碼熟悉了,就能更好地理解C++程序在CPU中是如何運行的,就能理解很多編程中之前理解不了的問題了。
匯編代碼才能最直接、最本真地反映出具體的細節(jié)!很多高級語言難以理解的編程點和細節(jié),從匯編的角度去看,要好理解很多!
3.3、排查問題的經(jīng)驗多了,處理新問題就更加得心應(yīng)手了
? ? ? ?排查的問題越多,見識就越多,積累的經(jīng)驗就越多,這樣在排查新的問題時手段就更多,思路會更加開闊,更加得心應(yīng)手,定位問題的速度會更快。
3.4、在排查問題的過程中,可以主動地去發(fā)掘?qū)W習的機會,去擴充自己的視野
? ? ? ?在和兄弟組一起聯(lián)調(diào)排查問題時,在幫兄弟項目組排查異常崩潰時,可以查看到其他開發(fā)組的代碼,可以了解他們代碼中好的設(shè)計思想。也可以了解到他們模塊中的業(yè)務(wù)流程,對把握整個系統(tǒng)的業(yè)務(wù)流程有很大的促進作用。還可以搗鼓搗鼓他們使用的一些分析工具。
? ? ? ? 我們在日常工作中,要積極主動地發(fā)掘這樣的學習機會,這些能有效地擴充我們的視野和認知。
3.5、在問題中進步,在問題中總結(jié)
? ? ? ?排查問題的過程,是不斷積累經(jīng)驗的過程,是技術(shù)取得不斷進步的過程!
? ? ? ?在問題排查出來后,要積極進行思考和總結(jié),進行一些擴散性的延伸與歸納。通過項目實戰(zhàn),能學到很多通過經(jīng)過實戰(zhàn)檢驗的知識點,能搞懂以前無法理解的知識點,能擴充自己的認知范圍,對一些知識點能有更進一步的理解和認識。通過不斷的思考與總結(jié),可以形成一套屬于自己的完整知識體系。比如我的技術(shù)總結(jié)專欄《C++軟件調(diào)試與異常排查從入門到精通》就是總結(jié)出來的一套完整的知識體系:
C++軟件調(diào)試與異常排查從入門到精通專欄https://blog.csdn.net/chenlycly/article/details/125529931
1)通過回顧很多異常問題的引發(fā)原因,總結(jié)出了《C++軟件異常的常見原因分析與總結(jié)》一文:
C++軟件異常的常見原因分析與總結(jié)https://blog.csdn.net/chenlycly/article/details/1249964732)通過回想很多異常問題的排查過程及排查方法,總結(jié)出了《排查C++軟件異常的常見思路與方法》一文:
排查C++軟件異常的常見思路與方法https://blog.csdn.net/chenlycly/article/details/1206293273)根據(jù)使用Visual Studio調(diào)試程序的實戰(zhàn)經(jīng)驗,總結(jié)出了《Visual Studio高效調(diào)試手段與技巧總結(jié)》一文:
Visual Studio高效調(diào)試手段與技巧總結(jié)https://blog.csdn.net/chenlycly/article/details/1248842254)根據(jù)排查問題時的各種內(nèi)存錯誤,總結(jié)出了《引發(fā)C++程序內(nèi)存錯誤的常見原因分析與總結(jié)》
引發(fā)C++程序內(nèi)存錯誤的常見原因分析與總結(jié)https://blog.csdn.net/chenlycly/article/details/128599525專欄《C++軟件調(diào)試與異常排查從入門到精通》還有很多其他的文章,感興趣的可以去專欄中看,這個地方我就不再逐一展開了。
3.6、通過排查問題去積累素材,可以用到日常的技術(shù)分享與培訓中
? ? ? ?在排查問題的過程中,可以將dump文件、pdb文件和相關(guān)代碼截圖保存下來,可以方便以后去查看,也可以為以后的技術(shù)分享與培訓積累大量的案例和素材。有大量實戰(zhàn)案例的技術(shù)分享,會更有內(nèi)容,更富有實戰(zhàn)性。
4、學習軟件調(diào)試技術(shù)的經(jīng)歷與心得分享
? ? ? ?最近幾年一直在從事C++軟件異常排查的工作,處理了成百上千個軟件異常問題,正是通過這些問題的項目實戰(zhàn),積累了大量的經(jīng)驗,并做了詳細的總結(jié)。《C++軟件調(diào)試與異常排查從入門到精通》技術(shù)總結(jié)專欄,正是通過大量的項目實戰(zhàn)總結(jié)整理出來的:
C++軟件調(diào)試與異常排查從入門到精通專欄https://blog.csdn.net/chenlycly/article/details/125529931專欄中的內(nèi)容都是通過項目實戰(zhàn)總結(jié)出來的實戰(zhàn)經(jīng)驗,有很大的參考價值,感興趣的可以去看一看!
4.1、學習軟件調(diào)試技術(shù)經(jīng)歷分享
? ? ? ? 多年前,在遇到軟件異常崩潰時排查起來非常吃力,深深地體會到了在C++軟件調(diào)試方面的不足,并對C++軟件調(diào)試技術(shù)產(chǎn)生了濃烈的興趣。于是開始系統(tǒng)地學習軟件調(diào)試方面的技術(shù)知識,動手搗鼓一些常用分析工具:
并堅持把這些知識和工具應(yīng)用到日常的項目中去。
? ? ? ?在學習與應(yīng)用的過程中,同事們也給予了大量的指導與幫助,特別是負責軟件異常排查的同事給我分享大量的實戰(zhàn)經(jīng)驗。就這樣逐漸敲開了C++軟件調(diào)試的大門,逐步承擔起了部門C++軟件項目中各種異常崩潰的排查工作。
? ? ? ?在邀請公司技術(shù)專家排查項目難題時,很珍惜這些難得的機會,跟著專家后面也學到了很多平時學不到的分析經(jīng)驗,以及一些高效的分析工具。一邊學習,一邊排查問題,一邊積累經(jīng)驗。
? ? ? ?對于一些典型的有代表性的問題,事后會進行完整的復盤,搞清楚問題的來龍去脈,并對相關(guān)的技術(shù)點進行總結(jié)與進一步的思考。即便問題出在別的開發(fā)組的模塊中,也會主動地幫忙排查,查看他們模塊的代碼,把問題給搞清楚。在這個過程中,不僅了解了底層模塊的相關(guān)代碼的設(shè)計思想和業(yè)務(wù)邏輯,還積累了大量的問題場景和素材,為后期的全面總結(jié)做好了大量的知識儲備。
4.2、做技術(shù)分享的一些心得
? ? ? ?通過幾年的軟件異常排查項目實戰(zhàn),對C++軟件調(diào)試與異常排查技術(shù)進行了系統(tǒng)地總結(jié),并開始對外輸出這方面的內(nèi)容。在公司范圍內(nèi)開始做C++軟件調(diào)試技術(shù)的分享與培訓,在培訓和交流的過程中發(fā)現(xiàn)很多C++程序員在軟件調(diào)試這一塊比較欠缺,無論是剛畢業(yè)的年輕人,還是工作多年的老程序員。這其中有一些個人的原因,也有一些環(huán)境認知的原因。
培訓的過程中大家反映都很強烈,都驚嘆于分析工具能如此高效的定位問題,都覺得培訓內(nèi)容很有實戰(zhàn)參考價值。但很多人還是沒能堅持學習,大多數(shù)基本都是三分鐘熱度,事后并沒有主動地去研究去搗鼓常用的分析工具,并沒有將相關(guān)內(nèi)容和工具應(yīng)用到實際的項目中去。
? ? ? ?一門技術(shù)的學習,是離不開努力和折騰的,我們需要把手動起來!在我們漫長的職業(yè)生涯中,正是通過很多小事件從量變到質(zhì)變,去實現(xiàn)技術(shù)的提升。
總結(jié)
以上是生活随笔為你收集整理的为什么要学习C++软件调试技术?掌握这类技术都有哪些好处?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QuickBooks 2007 All-
- 下一篇: 插入排序Java代码实现