在Visual Studio的调用栈窗口中,内存地址是什么意思?

编程语言 2026-07-11

我正在调试我的应用程序,名为 floor.exe。我的应用程序抛出了一个异常,我想弄清楚发生了什么。

我已经打开调用栈窗口,看到该窗口包含多种信息:

  1. floor.exe!<function_name> Line <Line number>
  2. Module.dll!<function_name> Line <Line number>
  3. <Memory address>(...)
  4. Module.dll!<Memory address>(...)

这里是一张截图:

调用栈内容

第一行(combase.dll!CoCreate...)的形式是 (2)。

接下来几行(02c06...())的形式是 (3)。

活动行(floor.exe!CFloorApp::InitInstance() ...)的形式是 (1)。

活动行下方的那一行(mfc140ud.dll!681e2fe1())的形式是 (4)。

无论内存地址是否能被识别,取决于调试符号:如果找到了符号,内存地址将被转换成函数/方法名;否则,它就只是一条内存地址。

这在“Modules”窗口中有解释。这里是一张截图:

模块窗口

  1. 应用程序的符号 floor.exe 已加载,因此得到 (1)。
  2. combase.dll 的符号已加载,因此得到 (2)。
  3. 应用程序 floor.exe 的符号已加载,那么为什么是 (3)?
  4. mfc140ud.dll 的符号未加载,因此得到 (4)。

有人能解释一下为什么会出现情况 (3) 吗?这是什么意思?我需要加载哪些符号,才能看到这意味着什么?

解决方案

有人能解释为什么会出现情况 (3) 吗?这是什么意思?

这意味着Visual Studio无法将给定的地址映射到它已知的、已加载的DLL。

这可能有若干原因。我能想到的一些包括:

  • 应用程序执行某种即时编译,在一个匿名内存块中生成可执行代码
  • 应用程序使用Visual Studio无法理解的机制加载可执行代码

我需要加载哪些符号,才能看到这意味着什么?

这取决于Visual Studio为什么没有显示任何DLL。可能有办法让Visual Studio了解这段代码,但具体取决于程序实际在做什么。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章