2013-05-15 61 views
0

使用以下代碼時,似乎即使將TheFST.dll與調試信息(/DEBUG)鏈接,我也無法在功能setSecurityRetriever的斷點處停止。在Visual Studio中有一種方法可以在通過GetModuleHandle + GetProcAddress調用的某個函數中設置斷點?

當調用GetModuleHandle時,VS沒有加載.pdb的原因是什麼?如果這是正常的,我如何改變強制VS加載.pdb文件的行爲?

const string bondDataRetrieveDLLName("TheFST.dll"); 
HMODULE hMod = GetModuleHandle(bondDataRetrieveDLLName.c_str()); 
if(hMod) 
{ 
    SecurityData bdrs = reinterpret_cast<SecurityData>(GetProcAddress(hMod, "setSecurityRetriever")); 
    if(bdrs) 
     bdrs(callback); 
} 
+1

你用'/ Zi'編譯過TheFST.dll中的代碼文件嗎?那裏沒有編譯器選項'/ DEBUG'。 '/ DEBUG'是一個鏈接器選項。 – user93353

+0

傻我,你是對的/ Zi沒有啓用,讓我檢查並關閉這個問題,如果有效的話。 – BlueTrin

+1

FWIW,使用LoadLibrary()和GetProcAddress()允許設置斷點或至少使用VC8逐步完成代碼。此外,如果VS仍然不合作,可以使用DebugBreak()觸發一箇中斷。 –

回答

1

可以programmaticaly設定的DebugBreak()斷點,因爲它已經提到。

如果您使用的是MSVC,您也可以將__asm int 3放在您想要斷點的位置。 它將在該行中完全分開。請記住隨後將其刪除。

1

推薦發表評論。

您是否使用/Zi編譯TheFST.dll中的代碼文件?那裏沒有編譯器選項/DEBUG/DEBUG是一個鏈接器選項

相關問題