• Windbg 快速定位C# 动态库依赖问题


     部署 C# windows 程序的时候,经常会遇到在开发环境中跑得好好的,在客户电脑莫名奇妙找不到库,导致无法正常启动程序。虽然depend.exe 也可以查找依赖,但有时候并不好使,费时费力。话不多说,正文开始。

    在开发环境下,运行windbg,打开执行文件,按F5 让程序跑起来

    会看到正常情况下dll加载信息,这些就是正常运行需要用到的dll

    1. ModLoad: 2f780000 2f976000 E:\XXXXX\yyyyy\bin\Debug\VideoDll.dll
    2. ModLoad: 2f780000 2f976000 E:\XXXXX\yyyyy\bin\Debug\VideoDll.dll
    3. ModLoad: 33e60000 3482c000 E:\XXXXX\yyyyy\bin\Debug\avformat-58.dll
    4. ModLoad: 33e60000 36902000 E:\XXXXX\yyyyy\bin\Debug\avcodec-58.dll
    5. ModLoad: 50990000 509fd000 C:\WINDOWS\SysWOW64\MSVCP140.dll
    6. ModLoad: 5f7d0000 5f7e5000 C:\WINDOWS\SysWOW64\VCRUNTIME140.dll
    7. ModLoad: 2f980000 2fad5000 E:\XXXXX\yyyyy\bin\Debug\avutil-56.dll
    8. ModLoad: 7b8d0000 7b95a000 E:\XXXXX\yyyyy\bin\Debug\swresample-3.dll
    9. ModLoad: 2f980000 2fa0e000 E:\XXXXX\yyyyy\bin\Debug\swscale-5.dll
    10. ModLoad: 33e60000 3482c000 E:\XXXXX\yyyyy\bin\Debug\avformat-58.dll
    11. ModLoad: 753b0000 754aa000 C:\WINDOWS\SysWOW64\CRYPT32.dll
    12. ModLoad: 2f980000 2fad5000 E:\XXXXX\yyyyy\bin\Debug\avutil-56.dll
    13. ModLoad: 34830000 372d2000 E:\XXXXX\yyyyy\bin\Debug\avcodec-58.dll
    14. ModLoad: 2fae0000 2fb6e000 E:\XXXXX\yyyyy\bin\Debug\swscale-5.dll
    15. ModLoad: 372e0000 37435000 E:\XXXXX\yyyyy\bin\Debug\avutil-56.dll

      然后在出现问题的电脑执行相同的操作,得到类似的信息,对比信息,可以知道大概是确实啥库导致的,这里缺少的是 MSVCP140.dll。

    1. ModLoad: 2f780000 2f976000 E:\XXXXX\yyyyy\bin\Debug\VideoDll.dll
    2. ModLoad: 2f780000 2f976000 E:\XXXXX\yyyyy\bin\Debug\VideoDll.dll
    3. ModLoad: 33e60000 3482c000 E:\XXXXX\yyyyy\bin\Debug\avformat-58.dll
    4. ModLoad: 33e60000 36902000 E:\XXXXX\yyyyy\bin\Debug\avcodec-58.dll
    5. ModLoad: 2f980000 2fad5000 E:\XXXXX\yyyyy\bin\Debug\avutil-56.dll
    6. ModLoad: 7b8d0000 7b95a000 E:\XXXXX\yyyyy\bin\Debug\swresample-3.dll
    7. ModLoad: 2f980000 2fa0e000 E:\XXXXX\yyyyy\bin\Debug\swscale-5.dll
    8. ModLoad: 33e60000 3482c000 E:\XXXXX\yyyyy\bin\Debug\avformat-58.dll
    9. ModLoad: 753b0000 754aa000 C:\WINDOWS\SysWOW64\CRYPT32.dll
    10. ModLoad: 2f980000 2fad5000 E:\XXXXX\yyyyy\bin\Debug\avutil-56.dll
    11. ModLoad: 34830000 372d2000 E:\XXXXX\yyyyy\bin\Debug\avcodec-58.dll
    12. ModLoad: 2fae0000 2fb6e000 E:\XXXXX\yyyyy\bin\Debug\swscale-5.dll
    13. ModLoad: 372e0000 37435000 E:\XXXXX\yyyyy\bin\Debug\avutil-56.dl

     还有一种情况是dll库都在,但是加载dll库报错,也可以通过加载的dll 顺序看出来。

  • 相关阅读:
    Qt中设置鼠标透明度的应用及示例
    深入探讨MySQL数据库的InnoDB存储引擎架构
    Compose中Canvas绘制
    【代数学习题4.2】从零理解范数与迹 —— 求数域元素的范数与迹
    网站建设多少钱(做一个网站需要多少钱)
    初始网络知识
    【Spring Cloud】多数据源配置
    07-Hive优化---高级部分3
    Elasticsearch集群部署及Head插件安装
    数据结构——深度优先遍历(DFS)无向非连通图
  • 原文地址:https://blog.csdn.net/sinat_27720649/article/details/126533979