c++ - 将运行时库用作 dll 时无法进入 CRT 代码

标签 c++ visual-studio visual-studio-2015

我使用的是 Visual Studio 2015 Update 3,我有一个非常简单的纯 Win32 控制台 C++“Hello World”,除了做实验外没有其他用途:

int main()
{
  printf("Hello world");
  char *test = (char*)malloc(100);
}

如果项目使用多线程 DLL 运行时库(项目属性->配置属性->C/C++/->运行时库:多线程,我无法进入 malloc调试 DLL (/MDd))。

但是当我将此设置更改为多线程调试 (/MTd) 时,进入 malloc 工作正常。

但是步进信息 printf 总是工作正常。进入我自己的代码也总是工作正常。

有没有办法允许进入运行时库 DLL?

最佳答案

将 ucrtbased.dll build 10.0.10240.0 的符号发布到符号服务器时出错;未剥离的符号(带有源信息)最初发布到符号服务器,但后来在剥离的符号发布时被覆盖。

我们已经解决了这个问题并重新发布了未剥离的符号。如果您现在尝试从符号服务器下载此 DLL 的符号,您应该会得到未剥离的符号。

如果您已经下载了剥离的符号,则需要将它们从符号缓存中删除,以便调试器考虑重新下载未剥离的符号。在 Visual Studio 中,转到工具 => 选项、调试 => 符号。那里有一个文本框,“在此目录中缓存符号”。关闭 Visual Studio 。在 Windows 资源管理器中打开该目录并搜索“ucrtbased”。删除搜索到的所有 PDB 文件。

关于c++ - 将运行时库用作 dll 时无法进入 CRT 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38743586/

相关文章:

c++ - 如果我们对所有 C/C++ 文件使用统一的扩展名 (.c/.cpp),会有什么不同?

c++ - 构建一个 file.lib 到 file.a 可在 linux 上使用

visual-studio-2015 - 连接到 TFS 错误 TF31001 对象引用未设置为对象的实例

c++ - 如何在不使用 cmake 的情况下在 visual studio 2015 中编译 dlib 19.2

c# - 将 README.md 文件添加到 Visual Studio 2015 中的 c# 项目

c++ - OpenGL glOrtho 设置匹配窗口大小

c++ - 编译器如何确定哪些成员函数发生变异?

c# - 从富文本框中获取选中的文本

c++ - g++/minGW 可以与 Windows SDK 配合使用吗? Visual Studio 是唯一的选择吗?

c++ - MFC CComboBoxEx GDI 资源泄漏