首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试调试调用C++ DLL的VBA,"wntdll.pdb未加载“

尝试调试调用C++ DLL的VBA,"wntdll.pdb未加载“
EN

Stack Overflow用户
提问于 2013-11-01 18:18:09
回答 1查看 17.3K关注 0票数 0

这是一个很长的解释,但我不确定调试过程中的问题在哪里。

我有一个Excel宏,它在C++ DLL中调用一个函数。每次调用此函数时,Excel实例都会突然强制退出,没有任何警告或错误消息。我试图通过在中设置调试来跟踪正在发生的事情,如下所示:

配置属性->调试->命令:C:\Program (x86)\Microsoft Office\Office14\EXCEL.EXE

配置属性->C/C++->浏览信息>启用浏览信息:是(/FR)

然后,单击要测试的函数,设置断点,然后按F5开始调试。我收到一条错误消息,告诉我Excel.exe的调试信息不可用,我单击“是”继续调试。

打开一个Excel实例。C++断点现在已更改为白色“断点不会被击中”的圆圈。我打开带有宏的工作簿,并运行宏。

在Visual中,我收到一条消息,EXCEL.EXE触发了一个断点,我猜这是我在C++代码中设置的断点,然后单击“click”。打开一个新的选项卡,其中有一条消息:

代码语言:javascript
运行
复制
wntdll.pdb not loaded

此时,调试器将不再继续,因此我手动停止它,Excel强制退出;输出窗口显示

EXCEL.EXE已退出代码0。

我进入调试选项->符号并检查"Microsoft符号服务器“框;我不知道我需要哪些all符号,所以我选择了”自动加载所有模块的符号“。我启动调试器。

我收到有关Excel不可用的调试信息的相同消息,然后打开Excel实例。我再次打开工作簿并启动宏。同时,在VS中有许多DLL的符号被加载。

VS中会弹出一个标签,上面写着:

代码语言:javascript
运行
复制
Source not available
Source information is missing from the debug information in this module.

也许正确的DLL的符号还没有加载,但是我不想等待所有的符号加载;我在之前尝试过,10分钟过去了,符号仍然在加载。

查看调用堆栈,以下是最近的调用:

代码语言:javascript
运行
复制
ntdll.dll!_RtlReportCriticalFailure@8() Unknown
ntdll.dll!_RtlpReportHeapFailure@4()    Unknown
ntdll.dll!_RtlpLogHeapFailure@24()  Unknown

我的C++应用程序的代码还没有被调用;这些调用是在VBE7和ole32调用之后立即进行的。

我只想能够调试我的代码,并找出Excel退出的原因。有人能理解这里发生了什么吗?

编辑:这是错误发生时的完整调用堆栈:

代码语言:javascript
运行
复制
ntdll.dll!_RtlReportCriticalFailure@8() Unknown
ntdll.dll!_RtlpReportHeapFailure@4()    Unknown
ntdll.dll!_RtlpLogHeapFailure@24()  Unknown
ntdll.dll!_RtlSizeHeap@12() Unknown
ole32.dll!CRetailMalloc_GetSize(IMalloc * pThis, void * pv) Line 710    C++
oleaut32.dll!APP_DATA::FreeCachedMem(void *,unsigned long)  Unknown
oleaut32.dll!_SysFreeString@4() 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
VBE7.DLL!_EbInvokeItem@4()  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
kernel32.dll!@BaseThreadInitThunk@12()  Unknown
ntdll.dll!___RtlUserThreadStart@8() Unknown
ntdll.dll!__RtlUserThreadStart@8()  Unknown
EN

回答 1

Stack Overflow用户

发布于 2013-11-01 18:25:35

程序数据库(PDB)文件保存调试和项目状态信息,这些信息允许对程序的调试配置进行增量链接。Visual只是简单地告诉您,他无法找到相关的调试信息,从而允许您使用源代码进行调试。

我认为wntdll.pdbntdll.dll相关,您可以通过在Tools -> Options ->中调试->符号来设置VS中的符号。

本页面提供了一些信息,特别是有关使用symchk.exe下载符号的部分:

Windows调试符号-不加载

关于如何使用symchk.exe的说明如下:

http://support.microsoft.com/kb/311503

现在,这个问题可能与您的崩溃无关,我建议您使用过程监视器来监视来自进程的消息。这可能会极大地帮助你指出出了什么问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19732857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档