检查程序对动态库的依赖

转载请注明出处:http://blog.csdn.net/horkychen

测试程序时会出现找不到指定的库或库函数的错误,表示某个依赖库不存在或版本不正确。如果使用的是动态加载的动态库所依赖的包不存在,如果程序没有做好异常处理的话,会让你很难定位到问题。比如GDI+库。假设一个程序A,调用了动态库B,而B链接了GDI+,这时运行在Windows 2000上时,系统里没有GDI+的库,会导致A不断Crash掉。因为GDI+库不是一般C的动态库,一般没有库加载的动作,使得排查问题会有很多的障碍。

这时,我们如果利用依赖关系的查看工具就可以容易判断出来。在Linux中可以使用ldd指令很容易地获得依赖包信息。而在Windows中,就可以使用Dpendency Walker,一个曾经包在Visual Studio 6中的工具。

下面是一个示例。这个程序是使用Cygwin编译的,在没有Gygwin的环境下运行不了,因为缺少了依赖的库。

下载地址:http://dependencywalker.com/

 

不得已的时候也可以使用命令行的方式执行。比如下面的指令:

depends -c -f:0 -u:1 -pa:1 -pf:1 -pe:1 -pl:1 -pg:1 -sm:12 -sf:4 -ot:result.txt D:\Project\UnixTools\assert.exe

IDE调试而不断加入Debug信息的时候,或许它能帮你一把。

在程序运用有时需要查看一下当前程序加载了哪些库,推荐Process Explorer。它是一个比较全面的工具。可以快速定位程序,支持单独查看单个进程的CPU及内存占用情况等。

还有一个轻量级的工具可以使用:CurrProcess,来自一家很牛的技术公司:NirSoft

 在Linux和Mac OS下系统提供的工具就可以做到。Mac OS 下是Activity Monitor, 在Linux下(Debian)是System Monitor或者如下的命令行:  

  cat /proc/<pid>/maps  (至于细节,可以参考:http://blog.csdn.net/z_man/article/details/3839677)

下面是两个系统下的截图:

Activity Monitor in Mac OS


 *(双击选中的进程)

System Monitor in Linux:


*(右击选中的进程,选择Maps).


总之,工欲善其事,必先利其器!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值