首页 文章

Microsoft Visual Studio:Debug dll由内置于发布模式的二进制文件使用

提问于
浏览
0

在我的Visual Studio 2008项目中,活动配置为Release,并且在编译器和链接器设置中未启用调试符号 . 我正在从命令提示符构建一个exe文件:

devenv standalone_cpp.sln /build "RELEASE|WIN32"

没有理由在运行时使用调试DLL MSVCR90d.dll,但它会崩溃 . 我没有丝毫的线索,为什么只有调试dll被拾取而不是释放DLL MSVCR90.dll . 有人可以帮忙吗?

我甚至尝试在调试模式下构建我的.exe,希望它不会崩溃,但它仍然会崩溃同样的断言失败_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse) . 在我开枪之前请帮忙 .

2 回答

  • 1

    Re-install the MSVS2008 Service Pack 1. 您的安装似乎已损坏 .

    我已经发生了这种情况 - 它表现出像这样的神秘行为,虽然我也看到它在链接大型DLL / EXE时出现奇怪的“内部错误”,有时编译非常大的项目或非常大的翻译单元 . 出于某种原因,重新安装该Service Pack有效 .

    这是一个快速链接:http://www.microsoft.com/downloads/en/details.aspx?FamilyId=FBEE1648-7106-44A7-9649-6D9F6D58056E&displaylang=en

    另一个想法可能是您将调试链接到您的发布可执行文件 . 即使您为“ RELEASE|WIN32 ”构建了解决方案,如果任何先决条件(链接库)是调试版本(直接引用 *.lib ,或者您引用了调试路径而不是发布路径),您最终会得到mix和该DLL的"debug"版本将尝试加载 .

    然后,它崩溃的原因可能是您在“发布”模块中分配并在“调试”模块中删除(反之亦然) . 这是行不通的,因为分配器是不同的(因为“调试”版本为标记和其他“调试检查”分配额外状态) .

    请记住,即使您从命令行构建,MSVS2008也将"override"与 Tools==>Options 中的项目/解决方案设置进行任何设置/解决方案设置 . 检查是否没有为发布目标中的链接设置调试路径 . (这是微软做出的错误决定,因为它导致项目/解决方案文件没有描述实际发生的情况,他们在MSVS2010中删除了"feature" . )

    你可能也看看:

  • 0

    我认为@Charley是有钱的 .

    下载Dependency Walker并查看实际导致调试DLL加载的原因 . 如果你在问题中说的是正确的,那么它可能是你的exe依赖的另一个库 .

相关问题