检查程序对动态库的依赖

前端之家收集整理的这篇文章主要介绍了检查程序对动态库的依赖前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

转载请注明出处: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).


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

猜你在找的设计模式相关文章