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

Cannot step into CRT code when using runtime library as a dll

本文关键字:代码 CRT 运行 dll      更新时间:2023-10-16

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

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

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

但是,当我将此设置更改为多线程调试(/MTd)时,进入malloc就可以了。

但是步进信息printf总是工作良好。进入我自己的代码也总是很好。

有没有一种方法可以启用进入运行库DLL?

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

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

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

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