转载请注明出处: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/
不得已的时候也可以使用命令行的方式执行。比如下面的指令:
@H_301_32@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
@H_301_32@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).
总之,工欲善其事,必先利其器!
原文链接:https://www.f2er.com/javaschema/287062.html