在Visual Studio的调用栈窗口中,内存地址是什么意思?
我正在调试我的应用程序,名为 floor.exe。我的应用程序抛出了一个异常,我想弄清楚发生了什么。
我已经打开调用栈窗口,看到该窗口包含多种信息:
floor.exe!<function_name> Line <Line number>Module.dll!<function_name> Line <Line number><Memory address>(...)Module.dll!<Memory address>(...)
这里是一张截图:

第一行(combase.dll!CoCreate...)的形式是 (2)。
接下来几行(02c06...())的形式是 (3)。
活动行(floor.exe!CFloorApp::InitInstance() ...)的形式是 (1)。
活动行下方的那一行(mfc140ud.dll!681e2fe1())的形式是 (4)。
无论内存地址是否能被识别,取决于调试符号:如果找到了符号,内存地址将被转换成函数/方法名;否则,它就只是一条内存地址。
这在“Modules”窗口中有解释。这里是一张截图:

- 应用程序的符号
floor.exe已加载,因此得到 (1)。 combase.dll的符号已加载,因此得到 (2)。- 应用程序
floor.exe的符号已加载,那么为什么是 (3)? mfc140ud.dll的符号未加载,因此得到 (4)。
有人能解释一下为什么会出现情况 (3) 吗?这是什么意思?我需要加载哪些符号,才能看到这意味着什么?
解决方案
有人能解释为什么会出现情况 (3) 吗?这是什么意思?
这意味着Visual Studio无法将给定的地址映射到它已知的、已加载的DLL。
这可能有若干原因。我能想到的一些包括:
- 应用程序执行某种即时编译,在一个匿名内存块中生成可执行代码
- 应用程序使用Visual Studio无法理解的机制加载可执行代码
我需要加载哪些符号,才能看到这意味着什么?
这取决于Visual Studio为什么没有显示任何DLL。可能有办法让Visual Studio了解这段代码,但具体取决于程序实际在做什么。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。