這是一種很長的解釋,但我並不完全確定問題出在我的調試過程中。試圖調試調用C++ DLL的VBA,「wntdll.pdb未加載」
我有一個Excel宏調用C++ DLL中的函數。每次調用此函數時,Excel實例都會突然強制退出而不顯示警告或錯誤消息。我試圖通過在Visual Studio Express中設置調試來追蹤發生了什麼,如下所示:
配置屬性 - >調試 - >命令:C:\ Program Files(x86)\ Microsoft Office \ Office14 \ EXCEL。 EXE
配置屬性 - > C/C++ - >瀏覽信息 - >啓用瀏覽信息:是(/ FR)
然後我點擊我要測試的功能開始調試,設置斷點,然後按F5。我收到一條錯誤消息,告訴我調試信息不適用於Excel.exe,然後單擊「是」繼續調試。
Excel實例打開。現在C++斷點已經變成了白色的「斷點不會被擊中」的圓圈。我用我的宏打開工作簿,並運行宏。
在Visual Studio中,我收到一條消息,指出EXCEL.EXE觸發了一個斷點,我想這是我在C++代碼中設置的斷點,然後單擊「斷點」。新標籤中打開,用一條消息:
wntdll.pdb not loaded
此時,調試器將無法繼續,所以我手動停止,和Excel力退出;在輸出窗口說
EXCEL.EXE已與代碼退出0
我進入調試選項 - >符號,然後選中「Microsoft符號服務器」複選框;我不知道哪些DLL需要符號,所以我選擇「自動加載所有模塊的符號」。我開始調試器。
我收到有關調試信息不可用於Excel的相同消息,然後打開Excel實例。我再次打開工作簿並啓動宏。與此同時,在VS中有很多DLL的符號被加載。
一個選項卡VS彈出,上面寫着:
Source not available
Source information is missing from the debug information in this module.
也許正確的DLL的符號還沒有被加載,但我不想等待所有加載符號;我之前試過,10分鐘過去了,符號仍在加載。
望着調用堆棧,下面的調用是最近:
[email protected]() Unknown
[email protected]() Unknown
[email protected]() Unknown
無我的C++應用程序的代碼已經被稱爲之中;這些調用在VBE7和ole32調用後立即發生。
我只是想能夠調試我的代碼並找出Excel退出的原因。任何人都可以理解這裏發生的事情嗎?
編輯:這裏是完整的調用堆棧時出現錯誤:
[email protected]() Unknown
[email protected]() Unknown
[email protected]() Unknown
[email protected]() Unknown
ole32.dll!CRetailMalloc_GetSize(IMalloc * pThis, void * pv) Line 710 C++
oleaut32.dll!APP_DATA::FreeCachedMem(void *,unsigned long) Unknown
[email protected]() Unknown
VBE7.DLL!_lblEX_FFreeStr() Unknown
VBE7.DLL!_lblEX_VCallHresult() Unknown
VBE7.DLL!_lblEX_ImpAdCall() Unknown
VBE7.DLL!InvokeImmedSub(struct RTMI *,class GEN_PROJECT *,class EXFRAME *,struct IDispatch *) Unknown
VBE7.DLL!WATCHMGR::ExecuteImmedLogln(char * *,unsigned int,int,class GEN_PROJECT *,unsigned long,int,int,class WATCH *) Unknown
VBE7.DLL!ExecProcUnderCursor(void) Unknown
[email protected]() Unknown
VBE7.DLL!CmdFDispatchCommand(unsigned short) Unknown
VBE7.DLL!FTranslateAccelerator(struct tagMSG *,int) Unknown
VBE7.DLL!FRubyMsg(struct tagMSG *) Unknown
VBE7.DLL!MainFTranslateMessage(struct tagMSG *,unsigned long) Unknown
VBE7.DLL!CMsoComponent::FPreTranslateMessage(struct tagMSG *) Unknown
EXCEL.EXE!2f9f874a() Unknown
[Frames below may be incorrect and/or missing, no symbols loaded for EXCEL.EXE]
EXCEL.EXE!2f9f73f4() Unknown
MSO.DLL!637b77f1() Unknown
MSO.DLL!637e0143() Unknown
EXCEL.EXE!2f990ec5() Unknown
msvcr90.dll!___set_flsgetvalue() Unknown
msvcr90.dll!__getptd_noexit() Unknown
msvcr90.dll!__getptd() Unknown
msvcr90.dll!_LocaleUpdate::_LocaleUpdate(struct localeinfo_struct *) Unknown
msvcr90.dll!__ismbcalpha() Unknown
msvcr90.dll!__ismbblead() Unknown
0062430d() Unknown
[email protected]@12() Unknown
[email protected]() Unknown
[email protected]() Unknown
當錯誤發生時,你可以給完整的調用堆棧嗎? –
@IlyaBursov,只是發佈它。 – sigil
'0062430d()未知'看起來很可疑,但無法確定,嘗試另一種方法:在沒有調試的情況下運行excel,然後使用studio'attach to process',然後嘗試執行excel宏 –