在 Windows 上,运行一些程序时,可能会遇到应用程序错误提示(硬错误消息框,或者其他由程序动态加载模块错误产生的提示框)。这些提示一般与进程初始化失败有关,此时需要重点关注进程的模块加载过程。

一个非常有用的工具可以用来帮助调试这个问题,它叫做 Dependencies。可以从这里下载:Dependencies (Releases)
解压 Dependencies_x64_Release.
zip 文件。在解压的文件夹中,您将找到我们将使用的工具,名为 DependenciesGUI.exe
。
以下是有关如何使用此工具调试 DLL 依赖问题的分步说明。
1)排查 DLL 模块缺失问题
以下是有关如何使用此工具调试 DLL 依赖问题的分步说明。
-
DependenciesGUI.exe
双击运行。打开后它将如下所示: -
使用 Windows 资源管理器,转到安装 Audacity 的文件夹(通常为
C:\Program Files\Audacity
)。此文件夹中还有另一个名为modules
的文件夹。进入此文件夹,查找名为mod-openvino.dll
的文件。将此文件拖入 Dependencies 工具: -
将会执行初步分析,结果如下图所示——结果显示无法找到任何 DLL:
-
我们需要将
Audacity
文件夹添加到搜索路径,以便该工具能够解析所需的 DLL。为此,请转到“Options”(选项),然后单击“Customize search folders”(自定义搜索文件夹): -
在弹出的窗口中,点击新建(New),然后添加 Audacity 安装文件夹的路径。通常是
C:\Program Files\Audacity
: -
点击确定(OK)。列表中的大多数(或理想情况下是所有)依赖项都不再是红色。它应该看起来像这样:
-
列表中仍未解决的依赖项可能是导致您出现问题的原因。例如,下图演示了whisper.dll因某种原因缺失的环境:
希望您能在这里轻松发现一些缺失的 DLL。
2)排查 DLL 导入依赖缺失问题
跟 Dependency Walker 类似,Dependencies 显示各种依赖错误。缺失导入的模块将会在左侧依赖树形图中显示为粉色高亮的图标,并在光标悬停在模块标签上时,显示 “ xx 模块缺失导入条目” 的提示信息。双击模块标签,可以在右侧的依赖信息视图中看到模块的导入依赖,它显示所有需要的函数的列表。缺失或不匹配的函数将在 PI 列显示为颜色突出的图标(与常规颜色不同,如这里的紫色与绿色)。(PI 列的图标文字标识了函数的类型,可以有 C 风格或者 C++ 风格等)。
下图显示了程序在目标机器上出现了导入缺失的问题:
注意:导入缺失表明所需模块与本机上实际加载的模块不匹配,这是版本问题导致的。具体到系统模块,比如这里的 comctl32.dll 有多个版本共存,出现导入不匹配,则可能是因为程序的清单文件中 SxS 加载配置存在错误。
适用于旧系统的 Dependency Walker 工具中类似的功能如图所示:
好了,分享就到这里结束了。