Visual Studio 2015 调用堆栈显示 <未知函数>

Posted

技术标签:

【中文标题】Visual Studio 2015 调用堆栈显示 <未知函数>【英文标题】:Visual Studio 2015 call stack displays <Unknown function> 【发布时间】:2016-06-21 16:59:20 【问题描述】:

最近在我的电脑上进行了 Windows 10 Pro 的全新安装后,我注意到每当我中断程序并打开调用堆栈时,调用堆栈都会显示应用程序名称和行号,但函数名称显示为 @ 987654323@。调用栈可以照常导航,但是缺少函数名很烦人。

我尝试了以下方法:

确保我正在运行带有完整符号生成的调试版本 确认已加载所有相关调试符号 尝试完全重新安装 Visual Studio(3 次) 将我的所有 Visual Studio 设置重置为默认值 删除/清理构建和用户特定文件 确保我的 Visual Studio 是最新的(版本 14.0.25123.00 更新 2)

甚至从默认模板创建一个新的 Win32 C++ 控制台应用程序并中断调用堆栈中的 return 0; 网络 &lt;Unknown function&gt;

示例:.

如何让调用堆栈显示正确的函数名称?

【问题讨论】:

我真的希望这不是“重新安装 2015”类的错误。你有所有最新的修补程序吗? 我还没有看到。只是好奇是您项目内部的函数还是它们在其他库中? 删除/清理构建和用户特定文件这是否包括删除项目的整个 Debug 文件夹? @MichaelDorgan 谢谢,与版本号一起添加到帖子中。 @drescherjm 它们是内部的,由我编写。在示例屏幕截图中,我在 main() 函数的第一行设置了一个断点。是的,这包括 Debug 文件夹(在示例中)。对于我自己的项目,VS 的构建文件是由 CMake 生成的,因此我删除了 all 构建文件和缓存文件并重新生成了它们。没有区别。 【参考方案1】:

此错误消息表示为 C++ 堆栈帧格式化文本的调试器组件失败。当安装程序以不匹配的二进制文件离开 Visual Studio 时,我已经看到了这种情况。以下是我会尝试的事情:

    首先通过devenv.exe /safemode 以安全模式运行VS,确保这不是由错误的扩展引起的,请参阅Visual Studio Command Line Switches。

    卸载任何VS扩展,然后卸载VS并确保从C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger删除所有文件(如果你在其他地方安装了VS可能需要更改路径),然后尝试重新安装。

    李>

    如果这不能解决问题,那么您的 Windows 安装可能有问题。您可以尝试在cppdebug.dll 上运行depends.exe,看看是否可以确定缺少哪个依赖项。

【讨论】:

感谢您的回复!不幸的是,以安全模式启动并没有帮助。我卸载了VS2015,删除了所有的剩菜并重新安装。不幸的是,问题仍然存在。根据我的发现,cppdebug.dll 应该位于 Common7\Packages\Debugger 下,但它不存在。我还对整个 VS2015 安装进行了搜索,但找不到它。我应该如何进行? Common7\Packages\Debugger 中缺少 cppdebug.dll?那将是一个问题。 cppdebug.vsdconfig 呢?我无法解释为什么安装程序不会安装它。您可以尝试重新下载安装程序。修复安装也应该把文件放回去。 是的,Common7\Packages\Debugger 中缺少 cppdebug.dll。 cppdebug.vsdconfig 也丢失了。昨天在重新安装之前,我从here 重新下载了安装程序。修复安装也没有帮助。此外,当我完全卸载我的 Visual Studio 安装并尝试重新安装它时,更改安装路径的选项显示为灰色,我无法更改它 - 它只允许我安装到它的安装位置我以前的 Windows 安装(第二个硬盘)。 我能够为 2 个不同版本的 Visual Studio 2015 获取这 2 个文件的副本。将它们放在文件夹中解决了问题。如果加载失败(似乎在您开始调试时加载),用户可能会收到缺少 .dll 的通知。我应该在 Microsoft Connect 上打开问题报告吗?【参考方案2】:

正如帕特里克所怀疑的那样,问题原来是Common7\Packages\Debugger 中缺少cppdebug.dllcppdebug.vsdconfig。不幸的是,Visual Studio 没有表明它们缺少问题,并且重新安装或修复安装也无济于事。幸运的是,我能够通过其他方式获得这些文件。 放置与您的 Visual Studio 版本等效的文件可以解决问题。

cppdebug.dllcppdebug.vsdconfig 用于不同的 Visual Studio 版本:

15.0.21215.1 14.0.25431.1 14.0.25425.1 14.0.25420.1 14.0.25123.0 14.0.24720.0

【讨论】:

以上是关于Visual Studio 2015 调用堆栈显示 <未知函数>的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 2013 上显示堆栈内容(不是堆栈调用)

在 Visual Studio 2015 调试器中确定每一帧的堆栈大小

如何仅使用键盘在 Visual Studio 中导航调用堆栈?

visual studio2015建立新项目显示“调用的目标发生异常”

Windbg可以看到Visual Studio中看不到的有效函数调用堆栈

OpenCV 3 Visual Studio 2017 调试,调用堆栈没有 .pdb 文件