• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            曲徑通幽

            programming_with_fun();

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              18 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(6)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            #

              最近發生一件有趣的事。過去一段代碼在64位windows系統上運行有問題。一個 CopyFile的API返回正確,但目標目錄system32下卻沒有相應文件。
              查找了一遍,發現syswow64目錄下有該文件,于是猜測OS做了目錄映射。
              后來找到了依據:http://support.microsoft.com/kb/942589
              32-bit APP在64-bit OS上運行,很多方面都需要學習。

            posted @ 2010-11-01 00:07 Meiosis 閱讀(340) | 評論 (0)編輯 收藏

              最近QQ游戲開發群里有一位朋友出了一道題,“如何在基類中調用子類獨有的函數,而不調用強制轉換”。這道題我一時間沒做出來,但是如果放寬限制,其實可以玩一個有趣的游戲。
              如果題目改為“如何在基類中調用子類獨有的虛函數,而不調用Class類型強制轉換”,那就可以利用C++對象模型中的虛表的直接訪問來實現父類調用子類的特有虛函數。(注意,這里特有是指子類有而基類沒有。)
              以下是我的解法,也在QQ群里發了,想不到引起群成員小小的轟動,看來游戲開發還是有很多同學對底層不感興趣啊。

             1 #include <stdio.h>
             2 
             3 class CFather{
             4 public:
             5     virtual ~CFather(){}
             6 };
             7 
             8 class CSon : public CFather{
             9     virtual ~CSon(){}
            10 
            11     virtual void DoSomething(void){ printf("son is crying\n"); }
            12 };
            13 
            14 int _tmain(int argc, _TCHAR* argv[])
            15 {
            16     CFather* fa = new CSon();
            17     DWORD dwDoSomething =  (*(DWORD*)(*(DWORD*)fa+4));
            18     _asm MOV ecx, fa
            19     _asm CALL dwDoSomething
            20 
            21     system("pause");
            22     return 0;
            23 }
            24 
            25 


            posted @ 2010-10-18 18:07 Meiosis 閱讀(2187) | 評論 (1)編輯 收藏

              由于自己是寫Server端程序的。最近有個別客戶反映在服務端負載量大的情況下,經常有客戶端的TCP請求處理超時。看了log文件,發現是服務端接收請求之后,未能及時處理請求并回復客戶端應答造成。
              仔細觀察了請求的處理過程,唯一耗時的就是文件I/O的Flush操作,因為這個操作會強制要求OS提交IO請求,而不是用OS自帶的IO緩沖。如果在IO處理非常頻繁的情況下,的確會導致服務端I/O告急,磁盤壓力過大,性能大幅下降,

            posted @ 2010-08-24 19:14 Meiosis 閱讀(729) | 評論 (0)編輯 收藏

              昨晚有客戶反應,產品中的某個進程啟動后1分鐘內會消失,看了log未發現異常。
              于是遠程過去,想看本潰報告,很遺憾的是,沒有生成任何本潰報告(我們用的是Debug系列的api寫的Crash Reporter)。情急之下,唯有求助偉大的Windbg了。
              attach,g,過一會兒,果然發現是有一處seh。但隨即發現缺symbols,于是馬上去發布服務器上找相應的pdb文件,放到遠程上去,.reload,果然,未知地址被準確地翻譯成代碼中的標識符。
              原來,崩潰的地方是動態加載的一個dll中的一個回調函數,怪不得沒捕獲到Crash Report。
              總結下來,Release版本的PDB生成是個關鍵,單有Windbg仍舊是巧婦難為無米之炊啊。

            posted @ 2010-07-22 08:26 Meiosis 閱讀(333) | 評論 (0)編輯 收藏

              最近用戶發現某個進程CPU占用率過高,導致服務器假死。
              于是想用Windbg嘗試調試一下。幸好我們的軟件發布時都會保留一份PDB文件。因此Windbg能夠準確地找到Symbol,即使是Release Version。
              打開Windbg幫助文檔,搜索"CPU"關鍵字,隨即找到了“Tracking Down a Processor Hog”。按照上面的方法試了一下,果然可以準確地定位到某個死鎖的線程。
              現在在工作中,利用Olldbg和Windbg的機會越來越多,在解決問題的過程中,也越發有成就感了。

            posted @ 2010-07-12 19:17 Meiosis 閱讀(1946) | 評論 (0)編輯 收藏

              今天在Code Project最新更新中看到"XCrashReport : Exception Handling and Crash Reporting"一文,泛讀之后,又讀了其中引用的幾篇文章。覺得挺不錯。主要講了VC Relase版本如何定位問題,主要思路是打開Link選項"Generate debug info"、添加參數"/OPT:REF"和/ignore:4089 ",用作Release版本產生PDF,且優化的時候能使產生的目標文件更小。效果比較明顯。
              隨便寫了一個會崩潰的工程,崩潰后記錄其崩潰位置,然后隨便打開一款調試器(OD,WinDBG,VC都可)運行debug,然后改EIP到出錯的位置下斷,GO!
              其實,在運行出錯的位置,然后改EIP的方法,以前在用OD時會使用到(類似F4或VC調試時的移動EIP),一直覺得ESP和Call Stack應該是分析Crash的重點,有時忽略了EIP的重要性。
            posted @ 2010-07-01 14:43 Meiosis 閱讀(261) | 評論 (0)編輯 收藏

              今天在學 《Learning Cocoa With Objective-C》其中有個AddressBook的例子,會發生編譯錯誤。原來是少了引用的依賴。
              添加方法是:Project - Add to project, 尋找\System\Library\Framework\AddressBook.framework中找到依賴的項即可。

            posted @ 2010-06-20 23:42 Meiosis 閱讀(2570) | 評論 (0)編輯 收藏

              最近拿到一個第三方廠家的庫,由于Delphi的同事看不懂c++的例子,所以讓我用C++封裝一個簡單的Wrapper給其調用。
              后來發現一個問題,由于原始的函數聲明中的參數使用字符數組 (char szData[MAX_PATH])  而不是用常用的指針(char *),給Delphi同事調用后,發現函數調用完退棧時候程序本潰,原因是訪問違例,非法地址訪問0x72。
              這么一來感覺比較奇怪,0x72 這個地址顯然是個垃圾地址,一般如果是空指針的話因該是 0x00,如果是野指針,一般也不至于會那么小,0x72與程序加載地址都相去甚遠。
              在vc6(公司只準用vc6)里跟了一下反匯編,感覺信息缺少比較多,能看到的地方已經堆棧被破壞了。于是用了OD跟一下。發現Delphi調用我封裝的 函數時,明明2個入參,卻傳入了3個。多傳了個260。260對于vc程序員應該比較熟悉了,就是MAX_PATH的值。于是乎,告知了Delphi程序 員,方才得知,原來Delphi是可以在聲明時指定數組長度的,也就是說,函數的入參,數組和指針是兩種聲明,如此一來,水落石出了。
            posted @ 2010-06-20 23:34 Meiosis 閱讀(372) | 評論 (0)編輯 收藏

            僅列出標題
            共2頁: 1 2 
            色狠狠久久AV五月综合| 亚洲午夜久久久久妓女影院| 丁香狠狠色婷婷久久综合| 久久激情五月丁香伊人| 久久久av波多野一区二区| 久久久久久毛片免费看| 伊人久久精品无码二区麻豆| 国产精品欧美久久久天天影视| 国产精品99久久久久久宅男| 久久精品国产免费| 久久久免费精品re6| 久久久WWW成人| 久久久久亚洲精品天堂| 中文字幕久久亚洲一区| 久久久中文字幕日本| 天天爽天天爽天天片a久久网| 久久久久久久亚洲Av无码| 国产—久久香蕉国产线看观看| 99精品国产免费久久久久久下载| 久久精品一区二区三区中文字幕| 亚洲国产精品无码久久| 伊人久久大香线蕉AV色婷婷色| 国内精品久久久久久99蜜桃| 成人久久精品一区二区三区| 久久久99精品一区二区| 色综合久久88色综合天天| 久久这里只有精品18| 综合久久一区二区三区| 国内精品欧美久久精品| 亚洲伊人久久成综合人影院| 99久久精品费精品国产| 日韩AV毛片精品久久久| 无码国内精品久久综合88| 久久99国产一区二区三区| 久久99精品国产99久久6男男| 国内精品久久久久影院薰衣草 | 日本久久久久亚洲中字幕| 亚洲国产视频久久| 久久久久人妻一区精品色| 久久精品人人做人人妻人人玩| 亚洲国产精品无码久久久蜜芽|