【问题标题】:DBGHelp.dll causes load of msvcrt.dll in debug versionDBGHelp.dll 导致在调试版本中加载 msvcrt.dll
【发布时间】:2010-10-24 14:55:24
【问题描述】:

我的应用程序使用 VC6 sp6 编译,使用 DBGHelp.lib 获取堆栈信息。该代码在调试和发布编译中是相似的。 问题是在执行调试版本时,DBGHelp.dll 会加载 msvcrt.dll(发布版本)。无论如何,我的调试链接已经加载了 msvcrtd.dll。 所以我最终在调试版本的过程中同时拥有 msvcrtd.dll 和 msvcrt.dll。 dsp设置为加载默认库,根本没有直接提到msvcrt(d).lib。 如果我取出使用 DBGHelp.dll 的代码并从 dsp 链接列表中删除 DBGHelp.lib,则不会加载 msvcrt.dll。

我该如何解决这个问题?

我只需要在我的调试执行中使用 msvcrtd.dll。

是否有用于调试的特殊版本 DBGHelp.dll(将使用 msvcrtd.dll)?

【问题讨论】:

    标签: c++ linker msvcrt dbghelp


    【解决方案1】:

    同时加载 MSVCRT.LIB 和 MSVCRTD.DLL 有什么问题?无论如何,这仅在您的调试版本中,我会想到,正如您在问题中所指出的那样。

    我不认为您真的想开始使用 Debug OS DLL - 这就是 DBGHELP.DLL 的含义 - 例如,这并不比让您的应用加载 Debug Kernel32.dll 更可取。

    【讨论】:

    • Rational Purify(内存泄漏分析器)警告我同时拥有它们。我其实不知道有什么影响。你确定两个都没有问题吗?
    • @itaj - 我会四处挖掘,但我无法想象为什么这是一个问题,只要内存模型混合在一起。 dbghelp.dll 是否返回您分配的内存?不是你应该没事。由于 DLL 具有 C 接口,因此 C+ 类没有问题。
    • DBHelp 没有混合所有权(没有混合 alloc/free),如果发生这种情况,它可能会立即使应用程序崩溃。我目前没有任何问题,我只是假设版本 msvcrt 不应该在调试版本中加载。
    • @itaj - 我想你会没事的 - 毕竟这只是一个警告。 Purify 警告代码是什么?
    • 一位同行收到此净化警告并告诉我,我想我可能过早地得出结论,将两者放在同一个过程中是一个问题。只是不需要混合模型。净化警告可能对他的模块来说更本地化,也许那里有一些模型混合需要解决。但这将是一个本地修复NP。感谢您的帮助。
    猜你喜欢
    • 2013-03-30
    • 2014-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多