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

时间:2016-08-03 12:24:15

标签: 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运行时库(Project Properties-> Configuration Properties-> C / C ++ / - >运行时库:多线程),我无法进入malloc调试DLL(/ MDd))。

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

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

有没有办法启用步进运行时库DLL?

2 个答案:

答案 0 :(得分:6)

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

我们已解决此问题并重新发布未解除的符号。如果您现在尝试从符号服务器下载此DLL的符号,则应获取未提取符号。

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

答案 1 :(得分:1)

安装Windows 10 SDK(它还会在ucrtbased.dll中更新System32作为副作用)。