• 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 顺序看出来。

  • 相关阅读:
    Fluorescein-PEG-CLS,胆固醇-聚乙二醇-荧光素用于缩短包封周期
    Docker的安装(以CentOS 7为例)
    视觉设计规范
    go切片和指针切片
    c++多源BFS
    一、基础算法精讲:双指针
    库中如何实现vector
    话题浏览上涨70.6%!搞到“新顶流”了,小红书数据洞察品牌动作!
    Web自动化测试工具的关键功能
    【Flutter--实战】Flutter 简介
  • 原文地址:https://blog.csdn.net/sinat_27720649/article/details/126533979