简单介绍

Dependency Walker是一个免费的实用工具,它可以扫描任何32位或64位Windows模块(EXE,DLL,OCX,SYS等),并建立所有相关模块的分层树形图。Dependency Walker对于排除加载和执行模块故障错误非常有用。 Dependency Walker能检测出许多常见应用问题,例如缺少模块,无效的模块,导入/导出不匹配,循环依赖错误,不匹配的机器类型模块和模块初始化失败。所以对于程序员来说,Dependency Walker(以下简称Depends)是一项必备技能。

下载安装

Depends的下载地址为:http://www.dependencywalker.com/,选择相应的版本下载即可。

下载后进行解压缩,得到如下文件:


depends无需安装,直接点击depends.exe运行即可。

depends使用

有如下解决方案:一个解决方案中,有两个工程,一个是exe工程TestDll,另一个是动态库工程MyDllTestDll引用动态库MyDll

MyDll中导出函数如下:

头文件 algorithm.h

#pragma once__declspec(dllexport) int Add(int a, int b);
__declspec(dllexport) int Minus(int a, int b);
__declspec(dllexport) int Multiply(int a, int b);
__declspec(dllexport) int Devide(int a, int b);

实现文件algorithm.cpp

#pragma once#include "algorithm.h"int Add(int a, int b)
{return (a + b);
}int Minus(int a, int b)
{return (a - b);
}int Multiply(int a, int b)
{return a * b;
}int Devide(int a, int b)
{return a / b;
}

UseDllmain.cpp代码如下
(另外需设置附加包含目录附加库目录附加依赖项,最后将MyDll.dll放入TestDll.exe的运行路径下):

#include <iostream>
#include "algorithm.h" int main()
{int main()
{std::cout << "Hello World!\n";std::cout << Minus(1, 2) << std::endl;std::cout << Multiply(1, 2) << std::endl;return 0;
}

双击depends.exe,主界面如下:

直接拖入目标exe文件或者dll文件(也可以点击菜单栏上的File,通过Open对话框来打开目标文件),运行界面如下:

圈选部分为TestDll.exe的依赖关系,它依赖MyDll.dllMSVCP1400.DLL等,其各自又依赖其他DLL。
从中可以看出其依赖的深度较大,一般只需要查看最顶层的三次依赖即可。

单击MyDll.dll,运行界面如下:

界面右侧的Function下的函数签名不太清晰,可以右键函数名,选择Undecorate C++ Functions,将函数签名转换成更为易读的形式:

转换后的形式如下:


上部的圈选部分是MyDll.dll的引用对象(也即TestDll.exe)使用的导出函数,下部的圈选部分是MyDll.dll所有的导出函数。从图中可以看出,MyDll提供了4个函数而TestDll只使用了其中的int Minus(int, int)int Mutiply(int, int)

另外,注意下其中的颜色标识, 上部的引用函数,如果在动态库中存在,显示为绿色;如果不存在显示为红色下部的导出函数,如果被引用,显示成深蓝色;如果未被引用,显示成灰色

异常分析

函数缺失

如果将MyDll中的函数int Minus(int, int)删除,重新生成MyDll.dll,然后再次查看TestDll.exe的依赖关系,显示如下:

此时,TestDll.exe引用的两个函数:int Minus(int, int)MyDll.dll中已不存在,所有显示成红色;而int Multiply(int, int)依旧存在,显示成绿色。这时运行TestDll.exe,会报错显示如下:

动态库缺失

另外,如果删除MyDll.dll(MyDll.dll位于TestDll.exe同目录下),运行TestDll.exe显示如下:

查看依赖关系 dependency walker(depends)相关推荐

  1. IDEA maven项目查自动查看依赖关系,解决包冲突问题

    IDEA maven项目查自动查看依赖关系,解决包冲突问题 参考文章: (1)IDEA maven项目查自动查看依赖关系,解决包冲突问题 (2)https://www.cnblogs.com/jpfs ...

  2. rpm 查看依赖关系 依赖谁和被谁依赖

    1. 查询软件包依赖哪些软件 rpm -qR centos-release    安装  R参数的意思就是requires就是依赖哪些软件包 rpm -qpR centos-release 未安装 或 ...

  3. 在IDEA中查看依赖关系(*)

    1.查看项目的依赖关系 2.查看导入的jar包

  4. linux依赖关系查看命令,Linux下查看依赖关系

    我们在开发Linux程序时,经常会遇到查看自己的编译结果是否正常调用外部共享库,至少在编译结果能够查看到这层依赖关系.依赖关系有两种,一种是可执行文件依赖共享库,还有一种是共享库依赖共享库,查看方法如 ...

  5. 可视化查看依赖关系_图可视化分析解决方案KeyLines介绍

    Cambridge Intelligence作为图可视化领域的标杆公司,其产品KeyLine.ReGraph.KronoGraph都是图可视化领域典型解决方案,我们可以通过对KeyLine等相关产品的 ...

  6. go mod查看依赖关系

    在使用 Go module 过程中,随着引入的依赖增多,也许你会发现go.mod文件中部分依赖包后面会出现一个// indirect的标识.这个标识总是出现在require指令中,其中// 与代码的行 ...

  7. 将dumpbin从VS中抠出来,并使用dumpbin查看exe和dll库的依赖关系

    目录 1.初步说明 2.在开发的机器上使用dumpbin工具查看dll库的依赖关系 3.将dumpbin.exe从Visual Studio中抠出来 3.1.找到dumpbin.exe文件及其依赖的d ...

  8. 查看某个软件包依赖关系

    Apt.RPM.YUM 查询依赖关系 yum deplist pack_name rpm -qpR pack_name apt-cache depends pack_name # 显示该软件包的依赖关 ...

  9. Flutter查看库的依赖关系

    在纯Android项目中我们可以执行Task :app:dependencies(Gradle窗口中的app->Tasks->help->dependencies,选中右键运行)查看 ...

最新文章

  1. 面试官:你简历中写用过docker,能说说容器和镜像的区别吗?
  2. 智能实验室-全能优化(Guardio) 4.92.0.812
  3. 三体系建设是什么意思_湖南信息系统建设和服务能力评估体系怎么做?是什么?...
  4. 使用RSS订阅喜欢的微博博主
  5. Java的反射API
  6. Linux 线程占用CPU过高定位分析
  7. vc中把数据库记录表导入Excel
  8. Github开源之旅启程:GitHub 上部署网页
  9. 在本地电脑搭建一个网站 转自本文地址:http://www.fengzimo.com/1503.html 来源 疯子墨...
  10. AWS 挂了 11 个小时:因多处光缆被挖断
  11. mabatis传入参数
  12. 企业IT基础架构设计概要
  13. oracle查询某天的数据
  14. 网卡调优RSS、RPS、RFS和XPS
  15. js当前日期倒推,向前倒推或往后推算
  16. 自己的联想Y450笔记本无法连接无线网络的解决办法
  17. 微积分review 极限,迫敛性,极限四则运算,自然常数来历
  18. 整理的金蝶云苍穹初级练习题
  19. java 假设检验_Spark机器学习-Java版(二)-相关系数和假设检验
  20. C#常见容器ArrayList、List、HashSet、Hashtable 、Dictionary、Stack、Queue

热门文章

  1. 基于AIC评价指标的逐步回归Python语言实现
  2. 如何禁用笔记本触摸板
  3. 基于51单片机的蓝牙计步器设计
  4. 在计算机上如何连接网络,详细教您如何在计算机上设置宽带连接
  5. 【2016浙江省赛:区间取模】E : Modulo Query | ZOJ - 3940
  6. 华为鸿蒙糸统其它手机可以用吗,鸿蒙系统vivo能用吗
  7. 树莓派UFW防火墙简单设置
  8. 分糖问题和插板法:10个相同糖果分给3个小朋友,有几种分法?
  9. SDS(Spoken Dialogue System) 对话系统
  10. 云计算需要学习哪些内容 为什么要学容器技术