由于我的项目非常庞大,在调试时我手动禁用Visual Studio中所有模块的加载,然后启用仅那些我必须调试的DLL。这可以按预期工作。
但是由于Visual Studio中的模块列表不包含LIB文件,我如何调试特定静态库中的代码?
是否可以选择查看链接到库文件(。lib)的DLL列表?
答案 0 :(得分:1)
静态库未与任何内容链接。它只是一袋 您提供给链接器的目标文件,用于从中选择 它需要在程序中定义外部符号。 它从静态库中提取所需的目标文件 并将它们嵌入到你的程序中。
因此,假设abc.lib
包含目标文件a.obj
,b.obj
,c.obj
。您可以通过关联prog
和main.obj
来构建计划abc.lib
。 main.obj
需要a.obj
中定义的内容加上c.obj
中定义的内容,但b.obj
中没有定义。然后,prog
与您只是简单地链接三个目标文件main.obj
,a.obj
,c.obj
而未提及abc.lib
完全相同。
现在a.obj
或c.obj
可能会调用外部定义的函数
一个或多个DLL。也许main.obj
调用外部函数
在相同或其他DLL中定义。 prog
必须与之相关联
那些DLL - 不多也不少。 main.obj
的DLL依赖项
+ a.obj
+ c.obj
是prog
的DLL依赖项,反之亦然。
链接abc.lib
而不是a.obj
和c.obj
并没有隐藏任何内容。
答案 1 :(得分:0)
我要做的测试是使用静态库创建一个虚拟dll,然后看一下带有依赖性walker的dll(或使用vs链接进程)并查找链接的dll。