最近一直忙於項目,好久沒寫文章了,今天終於有些時間,把一些沉淀和思考總結一下,希望對大家有所幫助,也是對知識的一次梳理。
轉眼做windows開發已經又有5年的時間了,5年時間一直徘徊在幾個大系統之間,原型設計,組件設計,重構,features實現,調試,修改bug,寫過C++,用過COM,ATL,寫過.Net,做過互操作,寫過services用過WCF,可以說十八般武藝至少都嘗試過,不敢說精通,但是至少對大部分的問題有自己的理解。
首先我把目標鎖定在Windows平台,因為我的工作要求我在這個平台下去做,實戰經驗也都是在這個平台上面積累起來的。對於Linux和Java我也會關注一些相關的東西,也會去學習,但是限於個人興趣,同時也是為了更好的在windows平台上面完成我的工作。
首先我們來說說做Windows開發的必備知識,我們的目標是寫運行在windows上的代碼,所以我們需要對Windows 本身有所了解,這樣在我們寫的代碼遇到相關問題的時候我們才知道該干什么,什么是對的,什么事不對的,那么以下我所列舉的就是最基本的一些知識。
1. 進程和線程的關系以及同步,線程池技術。
2. 什么是用戶模式,什么是內核模式,什么是windows session/terminal。
3. 什么是虛擬內存,為什么會有內存泄漏,如何去抓內存泄露。
4. 什么叫對象,什么叫句柄,如何監控句柄和對象的泄露。
5. 什么叫注冊表,和COM有什么關系,.Net是怎么建立起來的,互操作的原理是什么。
下面說說工具,好的工具往往可以達到事半功倍的效果,對的時候用對的工具很重要。
Procexp.exe:有了這個工具所有callstack, DLL,句柄, 調用關系一目了然。
Procmon.exe:這個工具可以幫你監控差不多所有類型的文件。
Wireshark: 遇到網絡問題的時候,抓包分析很方便。
Performance: 抓memory Leak, 分析用戶態和內核態相關的問題很有用。
Windbg/SOS: 當你需要調試,客戶環境又不允許你用visual studio的時候,通過他們你可以看到一切你想看的東西。
時間關系先寫這些啦,希望對大家有所幫助。