原创 RTTI應用:let's cast

很早就瞭解到RTTI,但一直沒有機會用到它, 隨便舉個例子,在MFC的應用程序中,GetDlgItem()返回一個CWnd*,可是大家通常都直接cast,CEditCtrl *p = (CEditCtrl *)GetDlgItem(IDC

原创 世界上最難的語言

對你來說,最難的語言是什麼?難道不是C++? 首先,C++兼容C,C語言本身就是一種複雜的語言。你可以不承認這一點,如果你能看懂下面的程序的話。   變態的hello word   再次,C++的特性複雜,並且很自由,自由到了恐怖甚至變

原创 一個瀏覽器兼容性bug所想到的

是以前做過的一個項目,一個瀏覽器IE的插件,過濾打開的網頁並在網頁裏用圖片顯示一些信息。那時還是IE6的時代,沒多久出了IE7。這個插件在這2個版本工作的很好。最近心血來潮,想在IE8上試試,沒想到圖片始終顯示不出來。那份代碼已經有幾年沒

原创 Breakpoint won't be hit

微軟的步伐很快,開發工具一二年就是一個版本,但使用最多最得心應手的還數VC6,感覺從那以後,VS的穩定性差了很多,不是突然卡住,就是表現的莫名其妙。今天一個問題就折騰了大半天,使用VS2010打開一個原來的VC6的項目,是使用MFC寫的一

原创 [深度探索C++對象模型](簡體版)中的蛇足

  <深度探索C++對象模型>>(簡體版)中的蛇足 (沒有此書的人請勿看) 上次見到這本書是一年前(是候先生的繁體版),花了一個星期的時間讀完,囫圇吞棗,不求甚解,饒是如此,也解決了我在C++方面的諸多疑惑,這次終於看到了簡體版,同樣花了

原创 爲什麼對TerminateProcess斷點不起作用

最初發表在QQ空間,全文見 爲什麼對TerminateProcess斷點不起作用在內核態下巧設用戶模塊斷點介紹了在內核態下設置用戶模塊的斷點,結尾處留了一個問號,爲了簡化問題,這次直接在用戶態下調試。使用windbg 打開一個notepa

原创 在內核態下巧設用戶模塊斷點

假如我們調試內核時,需要在kernel32中設斷點。一般情況下,使用調試器中斷到內核中時,當時進程和線程都是Idle, kd> !processPROCESS 8054a900  SessionId: none  Cid: 0000   

原创 [JavaScript]OO的Timer

在JavaScript中使用timer很容易,function foo(){}setInterval( "foo()", 1000 );如果使用OO的

原创 深入淺出 First chance, second chance和ExceptionPort

ExceptionPort的作用,是在用戶態異常的第2輪分發過程中,如果第二輪還無人處理,那麼就會發到ExceptionPort 。關於異常的分發,部分可以參考 理解UnhandledExceptionFilter 對於Exceptio

原创 JIT的初始斷點

上網好好的,忽然IE Crash了,windbg作爲JIT被自動啓動起來,下意識的輸入!runaway, ~* kv查看,發現所有的線程都在ntdll!KiFastSystemCallRet,也就是在內核中,一時間很奇怪,那IE怎麼cra

原创 令人困惑的return by value

  問題從這裏開始。class X;const X operator+( const X& x1, const X& x2 );X foo(){return X(a+b);}和X foo(){X xx(a+b);return xx;}這兩

原创 實戰調試IE8

一個瀏覽器兼容性bug所想到的 文中提到了IE8有些特殊的地方, 對於開發人員來說,最大的問題是無法調試。關於IE8的更多信息,參見 IE 8 不得不說的七件事    針對IE8這個例子,我們可以考慮使用Windows爲應用程序提供的特殊

原创 理解UnhandledExceptionFilter

 最初發表在QQ空間,全文參見 理解UnhandledExceptionFilter UnhandledExceptionFilter,在一個windows平臺上的C/C++程序中,主線程的SEH框架會有2層,最外層是BaseProces

原创 靜態初始化--我的理解

首先要明確的是,所有的初始化都是運行時完成的。 0) int g;1) int global = rand();2) const int ci = 5; 3) struct test4) {5)  test() : i_(10) {}6)

原创 小議Windows平臺下的異常處理

最初發表在QQ空間:Windows平臺下的異常處理對windows平臺幾種異常處理的簡單介紹,權當拋磚引玉了。1. UEF(UnhandledExceptionFilter): 通過SetUnhandledExceptionFilter,