我使用的是 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/