【问题标题】:How to find out the list of DLLs dependent on a LIB file?如何找出依赖于 LIB 文件的 DLL 列表?
【发布时间】:2017-12-21 16:47:48
【问题描述】:

由于我的项目非常庞大,因此在调试时我手动禁用了 Visual Studio 中所有模块的加载,然后启用我必须调试的那些 DLL。这按预期工作。

但由于 Visual Studio 中的模块列表不包含 LIB 文件,我该如何调试特定静态库中的代码?

是否有查看链接到库文件 (.lib) 的 DLL 列表的选项?

【问题讨论】:

  • 既然你有static-libraries 标签,我假设你只是通过将它们称为.lib(而不是DLL 导入库)来表示这些。静态库不会在运行时加载,而是在链接时合并。因此,就目前而言,您的问题毫无意义。
  • 那么如何调试静态库代码呢?我看到启用“加载所有模块的符号”时可以调试静态库!我想通过加载最少数量的 DLL 的符号来调试静态库。那可能吗?如果是,该怎么做?
  • Is there an option to see the list of DLLs which are linked to a library file (.lib) ? 静态库没有可以列出的依赖项。依赖项(读取“未解析的外部符号”)在链接时解析,然后可以来自其他静态库或 DLL,或者只是 .obj 文件或“主可执行文件”本身。
  • This 也是相关的。
  • @Christian.K the "main executable" itself 这对我有用。感谢您提供信息。

标签: c++ visual-studio debugging dll static-libraries


【解决方案1】:

静态库不与任何东西链接。它只是一袋 提供给链接器的目标文件,从中选择 它需要在程序中定义外部符号。 它从静态库中提取所需的目标文件 并将它们嵌入到您的程序中。

所以,假设abc.lib 包含目标文件a.objb.objc.obj。您通过链接main.objabc.lib 来构建程序progmain.obj 需要在 a.obj 中定义的东西加上在 c.obj 中定义的东西,但在 b.obj 中没有定义。那么prog 与你只是简单地链接了三个目标文件main.obja.objc.obj 完全一样,根本没有提到abc.lib

现在a.objc.obj 可能会调用外部定义的函数 一个或多个 DLL。也许main.obj 调用外部函数 在相同或其他 DLL 中定义。 prog 必须与 那些 DLL - 不多也不少。 main.obj的DLL依赖 + a.obj + c.objprog 的 DLL 依赖项,反之亦然。 通过链接abc.lib 而不是a.objc.obj 并没有隐藏任何内容。

【讨论】:

  • 通过仅加载 prog.exe 的符号发现成功,因此它帮助我在调试时保持 Visual Studio 应用程序更轻。通过这种方式,我避免了加载所有其他需要大量时间的 DLL。 :)
【解决方案2】:

我会做的测试是使用静态库创建一个虚拟 dll,然后使用依赖walker(或使用 vs 链接过程)查看 dll 并找到链接的 dll。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 2013-02-13
    • 2018-03-28
    相关资源
    最近更新 更多