2012-08-27 63 views
1

我有一個在擴展模式下構建的外殼擴展,我也生成了調試符號和.pdb文件。我附上構建上下文菜單擴展.dll文件到運行explorer.exe進程在Visual Studio程序,我可以在輸出窗口中看到在程序連接explorer進程的事件,如下所示:在發佈模式下調試一個外殼擴展

'explorer.exe': Unloaded 'C:\Windows\System32\mydocs.dll' 
'explorer.exe': Unloaded 'C:\Windows\System32\sendmail.dll' 
'explorer.exe': Unloaded 'C:\Windows\System32\zipfldr.dll' 
The thread 'Win32 Thread' (0x16d8) has exited with code 0 (0x0). 
The thread 'Win32 Thread' (0x1650) has exited with code 0 (0x0). 
The thread 'Win32 Thread' (0x1070) has exited with code 0 (0x0). 

但它永遠達不到我在函數Initialize中設置的斷點(構成繼承並實現IshellExtInit類的類)。當我對文件進行右鍵單擊時,右鍵菜單會使用自定義上下文菜單進行初始化並執行所需的操作,但不會涉及到斷點! 我想知道如何調試,因爲我試圖註冊回收站的上下文菜單,它不工作,我想看看代碼發生了什麼。 與回收站登記代碼可以在這個帖子中找到: recycle bin registration

+1

調試發佈版本是衆所周知的不準確,即使使用符號也沒有多大改進。你可以試試windbg,ida或者VS'組裝模式;那些人會關注斷點,但你顯然正在組裝。 – ssube

+1

同意。雖然如果您啓用符號並從發佈版本中刪除所有優化,您可以使用其限制。 – drescherjm

+0

如果我建立在調試模式下,我得到這個:\t錯誤PRJ0019:一個工具從「執行註冊」返回一個錯誤代碼。我以管理員身份運行VS。 – AlexandruC

回答

2

嘗試手動使用REGSVR32註冊您的調試版本,例如

regsvr32 mydocs.dll 

您可能必須殺死資源管理器才能識別註冊表更改。

如果這樣做不起作用,您可以嘗試在擴展中拋出一個消息框,以查看是否會停止瀏覽器足夠長的時間以便調試到您的擴展。

相關問題