如果软件复杂,那么依赖关系的整理是一个很严重的问题,软件设计到的模块可能存在多个版本,可能在不断的改动;如果版本对不上或者有依赖文件丢失,
那么就需要这样一个工具来协助判断哪里出了问题.
软件的主窗口截图如下:
截图的标号分别对应于:
1、 常用工具栏
工具栏按钮功能分别是
Open(打开): 打开(dll/exe)以查看依赖关系,或者保存的视图
Save(保存): 保存打开的文件视图,保存的视图可以重新打开
Copy(拷贝): 将选中的内容拷贝为文本
Auto Expand(自动展开): 自动展开依赖树的所有节点
View Full Path(显示路径): 显示所有被依赖模块的绝对路径
Undecorate C++ Function(去除c++修饰符):所有的c++函数都被编译器进行修饰改名,这个按钮用于查看在头文件中声明的名字;关于c++的编译器改名可以google了解详情
View Modules In External Viewer(在新的试图中查看依赖关系): 同时查看多个dll/exe时可以用单独的窗口来查看各自的依赖关系
Properties(查看属性): 查看文件属性,等同于右键点击文件在弹出菜单里选择属性进行查看
Start Profile():[似乎是开始分析运行时依赖关系,未使用过此功能]
Stop Profile(停止分析)
2、 依赖树
3、 调用接口列表
4、 所有接口列表
上边两个图分别是在目录树上选择不同文件时的状态;在第一个截图里;选择的是根节点 Swscale-2.dll;右侧的函数列表可以看到右上侧的列表是空的,
因为根节点被调用的关系在这里无法看到;右下侧的窗口则是当前选中的节点(根节点)的所有导出函数列表;当我们选择根节点下的子
节点时(根节点依赖子节点里的那些文件);右上侧显示子节点的导出函数有哪些是被子节点的父节点所调用;右下侧的窗口则显示所有子节点的导出函数;
如果我们展开子节点到更下一级子节点进行查看,右侧窗口的逻辑仍然与前述保持一致.
5、 所有依赖的模块列表
6、 警告和出错消息
我们从Swscale-2.dll所在目录下移除AVUTIL-52.dll;然后重新打开Swscale-2.dll;
我们会看到一个弹出窗口告知遇到了依赖问题;依赖问题可能是依赖的文件找不到;或者依赖文件的版本不对;关掉对话框;我们会在左上侧的依赖树窗口
看到红色的子节点;表明该文件找不到或者版本不对;如果是版本不对;那么可以查看模块的绝对路径来看当前依赖的版本在那个目录下;
备注:
1、最后需要强调的是,这个软件有32位和64位两个版本;32位的版本只能查看32位dll/exe的依赖关系;64位软件只能查看64位dll/exe的依赖关系;
2、现在很多软件是使用多种语言进行开发的;但Dependency Walker支持的不仅仅是c/c++; .net/vb等编写的windows平台的模块都可以进行分析;
但对于其他语言起到的作用比较有限;
3、更多内容可以查看软件的帮助文档;
Ref:
http://www.dependencywalker.com/