03-windows分析工具(depends定位动态库加载失败问题)

windows系列调试工具


 01-windows调试工具(ProcDump使用)_越老越顽固的博客-CSDN博客_procdump使用方法​​​​​​

 02-windows调试工具(DebugDiag使用)_越老越顽固的博客-CSDN博客_debugdiag怎么用


一、问题描述

 近期在windows部署一套视频分析的服务,但是在运行过程中动态加载videoisecure.dll的时候发生了失败,windows下加载动态库失败正常都是缺少依赖库或者运行目录下的动态库的版本不对,所以我进行了下列步骤开始排查。

二、初步分析动态库的依赖关系

  1.  videoisecure.dll的这个动态库我是基于海康的流媒体平台isecure的SDK封装的一个导出动态库,但是海康提供的SDK是基于VS2015开发的,而我的应用程序和导出库是基于VS2013进行开发的。
  2. 测试步骤1:videoisecure.dll的依赖都是海康的SDK,如果海康SDK提供的Demo.exe可以运行那么加载的动态库依赖关系应该正常。于是在启动海康的Demo.exe查看是否可以正常运行,直接启动报错。也运行不起来。但是我本地Demoexe可以正常运行,
  3. 测试步骤2:既然程序运行失败,那么肯定是库的依赖关系出现了错误,所以我先使用depends的工具加载了Demo.exe,如图所示,vcruntime140.dll报错,提示某个导出接口有问题,那么应该就是这个依赖库出问题了,这个库的版本不匹配导致的了。
  4. 测试步骤3:然后我在我开发电脑上使用depends工具,加载了我本地的Demo.exe,发现vcruntime140.dll正常,未出现问题,那么就需要拷贝我本地对应的dll到服务器上,
  5. 点击view->Full Paths 显示Demo.exe依赖库的路径,拷贝对应路径下的vcruntime140.dll到服务器目录下,如下图所示:

  6. 然后再启动Demo.exe,发现程序能正常启动,正常来说,海康Demo能跑起来,依赖海康SDK开发的dll就能加载成功,然后再次启动视频分析服务,发现加载videoisecure.dll还是失败,错误码127。也就是依赖的动态库还是有问题,这里其实感觉很奇怪。所以继续排查,

2.对比正常服务的库的依赖关系

   使用depends的工具,继续查看videoisecure.dll,未发现动态库的异常,看似库的依赖关系应该正常,一时无法定位到错误,
    然后继续使用depends的工具,加载本地的videoisecure.dll,也未发现异常,由于两个依赖库的下面又继续依赖其余库,导致直接一个一个对比库的路径,很难发现问题,

    将两个机器上的depends加载的动态库详细信息,保存成txt文档,然后使用文本对比工具,查看库之间的依赖关系有什么不一样,file-->Save

 如下图所示,两个程序加载的库的依赖关系不同之处,

两者之间主要区别是HLOG.dll的依赖关系不一样,能正常加载videoisecure的hlog.dll依赖了hrp.dll,

很明显海康的hlog.dll的库版本不匹配,所以从本地又拷贝了一份hlog.dll和hrp.dll。 再次启动服务,运行正常,

总结

windows下分析程序加载和运行问题,可以使用depends的工具查看库之间的依赖关系是否有问题,大多数都是因为库版本不匹配导致的。
32为程序使用32位的depends的工具分析
64位程序使用63位的depends的工具分析
工具下载路径:https://download.csdn.net/download/qq_37103755/87262624

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值