最近在調試BHO,研究了一下調試方法。在調試BHO的時候首先需要標明你的浏覽器版本,我選擇的是IE8核心。
1. 配置IE的運作方式
由于IE8是多程序模式,為了能夠調試BHO,必須将IE8設定為單程序模式。網上有些介紹如何設定IE8為單程序的方法。但在我的機器上不見效,首先把網上的方法粘貼如下:
IE8的一個重要特性就是每個Tab 頁在獨立的程序中運作,我們稱之為LCIE (Loosely-Coupled IE)。 是以大家在更新到IE8之後會發現資料總管裡面有兩個或者多個iexplore.exe程序。
LCIE 的好處在:
1)某個Tab 頁崩潰之後不會影響其他Tab 頁和IE主視窗;
2)Tab 程序在Vista 和Windows 7 下面以 Low Integrity Level 運作,這種程序基本上無法對系統進行任何讀寫操作,可以嚴格把病毒木馬拒之門外。 這也就是大家所謂的"沙盤"技術。 插一句題外話:) 很多人認為"沙盤"技術是Google Chrome 獨創的,其實早在3年前的IE7就有這個功能了。
如果想要在IE8中關閉LCIE功能,使IE8以單個程序模式運作(IE8主視窗以及所有的Tab頁都在一個iexplore.exe程序), 可以設定系統資料庫:
1)在 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main 鍵下面添加DWORD值 TabProcGrowth ,并設定TabProcGrowth的數值為0 .(下圖例,注意狀态欄的路徑):
===============================================================================================================
我的機器用這個方法不行,然後就用了另外一個方法,思路也是修正系統資料庫鍵值,但是是這樣的:
首先,定位到系統資料庫鍵:HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main
然後在該鍵值下添加一個鍵值如下:
名稱:TabProcGrowth
類型:REG_DWORD
值: 0
2. 配置調試工具
我使用VC6.0,是以在project->setting->debug->executable for debug中設定iexplore.exe的路徑,一般是C:\Program Files\Internet Explorer\iexplore.exe 。
接着你就可以在dllMain或者invoke中設定斷點進行調試。
調試時需要注意rundll32.exe必須手動關閉,同時開啟多個rundll32.exe可能會導緻崩潰(除非你程式中的變量支援多程序共享)。