将运行库用作dll时,无法进入CRT代码
Cannot step into CRT code when using runtime library as a dll
我使用的是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
作为副作用)。
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 为什么在这个代码结束循环中没有得到结束
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 将运行库用作dll时,无法进入CRT代码