windriver 第8章:调试驱动程序

news/2025/12/11 8:47:10/文章来源:https://www.cnblogs.com/chencarl/p/19334134

以下是完整的第8章调试驱动程序的 Markdown 文档,可直接复制保存为 .md 文件使用:

第8章:调试驱动程序

以下章节将介绍如何调试硬件访问应用程序代码。

8.1 用户模式调试

由于 WinDriver 从用户模式访问,我们建议你首先使用标准调试软件(如编译器的调试器)调试代码。

调试监视器(Debug Monitor)是一款功能强大的图形模式和控制台模式工具,用于监控 WinDriver 内核处理的所有活动。你可以使用该工具监控发送到内核的每个命令的执行方式。

此外,WinDriver 允许你使用 WD_DebugAdd() 函数或高级 PrintDbgMessage() 函数,将自定义调试信息输出到调试监视器。注意,该函数可从用户模式和内核模式代码(使用 WinDriver 的内核插件功能创建)中调用,也可在高 IRQL 运行的函数(如内核插件 KP_IntAtIrql() 函数)中调用。

调试监视器有两个版本:

  • wddebug_gui — 图形界面(GUI)版本

  • wddebug — 控制台模式版本

注意,wddebug_gui 适用于所有受支持的桌面操作系统,但目前不适用于 Linux ARM/ARM64 平台。对于这些平台,请使用控制台模式的 wddebug

两个版本的调试监视器均位于 WinDriver/util 目录中。

WD_DebugAdd() 函数可从用户模式和内核模式代码(使用 WinDriver 的内核插件功能创建)中调用,也可在高 IRQL 运行的函数(如内核插件 KP_IntAtIrql() 函数)中调用。

你也可以选择将调试信息发送到内核调试器,而非调试监视器日志(下文将详细说明)。例如,若开发电脑出现系统崩溃(蓝屏死机/BSOD)或挂起,你可以在另一台电脑上记录调试信息。

大多数 WinDriver 函数都有返回值,用于指示成功状态或相关错误代码,这有助于调试过程。返回状态码定义在 WD_ERROR_CODES 枚举中。

使用内核插件(Kernel PlugIn)在核内开发代码时,你也可以在调试过程中使用任何内核调试器(例如,WinDbg — 随 Windows 驱动程序工具包(WDK)分发,是 Windows 调试工具包的一部分,可通过 Microsoft 网站获取)。如前所述,你也可以选择将调试监视器的调试信息定向到所选的内核调试器。

8.2 调试监视器

调试监视器工具会记录来自 WinDriver 内核模式和用户模式 API 的调试信息。你也可以使用 WinDriver API 将自定义调试信息发送到调试监视器日志。

当调试监视器处于激活状态时,使用 WinDriver 的 API(如 WD_Transfer())在核内读写卡上的内存范围时,WinDriver 内核模块会验证内存范围,即检查内存读写操作是否在为该卡定义的范围内。

在调试过程中,使用 DriverWizard 检查内存、寄存器和配置的值。

8.2.1 wddebug_gui 工具

wddebug_gui 是适用于 Windows 和 Linux 的调试监视器工具的全图形界面(GUI)版本。

通过以下任一方法运行调试监视器:

  1. 运行 WinDriver/util/wddebug_gui

  2. 从 DriverWizard 的“工具”菜单中运行调试监视器。

  3. 在 Windows 上,选择“开始 | 程序 | WinDriver | Debug Monitor”。

启动调试监视器

sdf

通过“调试选项”对话框设置调试监视器的状态、跟踪级别和调试章节信息,可通过以下方式激活该对话框:

  • 调试监视器的“视图 | 调试选项”菜单

  • 调试选项工具栏按钮

调试选项

sdf

  • 状态(Status)—— 设置跟踪开启或关闭。

  • 章节(Section)—— 选择要监控的 WinDriver API 部分。例如,若 PCI 卡的中断处理程序出现问题,选择“PCI”和“中断(Interrupts)”章节;USB 开发人员应选择“USB”章节。请谨慎选择要监控的章节,勾选过多不必要的选项可能导致信息溢出,难以定位问题。

  • 级别(Level)—— 选择为已定义资源显示的信息级别。“错误(Error)”是最低跟踪级别,屏幕输出最少;“跟踪(Trace)”是最高跟踪级别,会显示 WinDriver 内核执行的每一项操作。

  • 向操作系统内核调试器发送调试信息—— 勾选此选项可将来自 WinDriver 内核模块的调试信息除发送到调试监视器外,还发送到外部内核调试器。

在 Windows 上,首次启用此选项时需要重启电脑。免费的 Windows 内核调试器 WinDbg 随 Windows 驱动程序工具包(WDK)分发,是 Windows 调试工具包的一部分,可通过 Microsoft 网站获取。

  • 驱动程序名称(Driver Name)—— 此字段显示当前正在调试的驱动程序名称,修改该名称可调试重命名后的 WinDriver 驱动程序。

定义好要跟踪的内容和级别后,点击“确定(OK)”关闭“调试选项”窗口。

可通过调试监视器的菜单和工具栏进行其他配置。调试系统崩溃或挂起时,除了将调试信息发送到操作系统内核调试器外,还可通过“文件 | 切换自动保存(File | Toggle Auto-Save)”菜单选项(也可通过工具栏图标)自动保存调试监视器日志,这非常有用。

运行应用程序(分步运行或一次性运行)。

你可以使用“编辑 | 添加自定义信息(Edit | Add Custom Message...)”菜单选项(也可通过工具栏图标)向日志中添加自定义信息,这对于在日志中清晰标记不同的执行章节特别有用。

查看调试监视器日志(或内核调试器日志,若已启用),查找错误或任何意外信息。

8.2.1.1 在 wddebug_gui 中搜索

wddebug_gui 提供 4 种方式在调试输出中查找表达式:

  1. 用键盘输入表达式时,会立即在调试输出中搜索该表达式。

  2. 按下 CTRL+F 显示工具栏中的“查找(Find)”字段。

  3. 点击工具栏中的“查找(Find)”图标。

  4. 选择“编辑 | 查找(Edit | Find...)”。

找到表达式后会对其进行标记,可使用“上一个(Prev,F2)”和“下一个(Next,F3)”浏览表达式的多个匹配项。

sdf

8.2.1.2 用 wddebug_gui 打开 Windows 内核崩溃转储文件

在驱动程序开发中,内核崩溃导致蓝屏死机(BSOD)的情况并不少见。为帮助开发人员调试和解决这些崩溃问题,WinDriver 允许将其内核调试信息保存在系统崩溃时 Windows 自动创建的内存转储文件中。系统重启后,可在 wddebug_gui 中打开这些崩溃转储文件。

按以下步骤将调试信息定向到内核调试器:

  1. 打开所选的内核调试器。

  2. 运行调试监视器,并通过以下任一方法选择将 WinDriver 调试信息定向到内核调试器:

    • 打开调试监视器的图形界面版本 wddebug_gui(适用于 Windows、Linux 和 MacOS),在“调试选项”窗口中勾选“向操作系统内核调试器发送调试信息”选项,然后点击“确定(OK)”。

    • 运行调试监视器的控制台模式版本 wddebug(适用于所有受支持的操作系统),并附带 dbg_on 命令:

WDDEBUG [<driver_name>] dbg_on [<level>] \ [<sections>]   
  1. 选择“文件 | 符号文件路径(File | Symbol File Path...)”,加载驱动程序的符号文件 MyDriver.pdb(默认驱动程序的文件名为 lib/windrvr1650.pdb)。请勿跳过此步骤,否则内核转储文件可能无法理解。

  2. 选择“文件 | 处理内核转储(File | Process Kernel Dump...)”,加载内核崩溃转储文件(.dmp)。wddebug_gui 将显示崩溃转储文件的输出内容。

Windows 用户可使用 Microsoft 的 WinDbg 工具,该工具随 Windows 驱动程序工具包(WDK)分发,是 Windows 调试工具包的一部分,可通过 Microsoft 网站获取。

8.2.1.3 为已重命名的驱动程序运行 wddebug_gui

默认情况下,wddebug_gui 会记录来自默认 WinDriver 内核模块(windrvr1650.sys/.dll/.o/.ko)的信息。但你也可以通过以下两种方式,使用 wddebug_gui 记录此驱动程序重命名版本的调试信息(见第17章:驱动程序安装 — 高级问题):

  1. wddebug_gui 中,选择“视图 | 调试选项(View | Debug Options)”,将“驱动程序名称(Driver name)”字段的值修改为你重命名后的驱动程序名称。

  2. 在命令行中运行 wddebug_gui,并附带 driver_name 参数:

`wddebug_gui <driver_name>`   

驱动程序名称应设置为驱动程序文件的名称(不含文件扩展名),例如 windrvr1650,而非 Windows 上的 windrvr1650.sys 或 Linux 上的 windrvr1650.o。例如,若你在 Windows 上将默认的 windrvr1650.sys 驱动程序重命名为 my_driver.sys,可通过以下命令运行调试监视器,以记录该驱动程序的信息:

`wddebug_gui my_driver`

8.2.2 wddebug 工具

8.2.2.1 控制台模式 wddebug 执行

调试监视器工具的 wddebug 版本可在所有受支持的操作系统(Windows 和 Linux)上作为控制台模式应用程序执行。要使用控制台模式的调试监视器版本,请按以下方式运行 WinDriver/util/wddebug

wddebug 控制台模式用法
wddebug [<driver_name>] [<command>] [<level>] [<sections>]

wddebug 的参数必须按上述用法说明中的顺序提供。

  • <driver_name> — 要应用命令的驱动程序名称。

驱动程序名称应设置为 WinDriver 内核模块的名称(默认:windrvr1650),或该驱动程序的重命名版本(参见 17.2 重命名 WinDriver 内核驱动程序中的说明)。请注意,驱动程序名称应设置为驱动程序文件的名称(不含文件扩展名),例如 windrvr1650,而非 Windows 上的 windrvr1650.sys 或 Linux 上的 windrvr1650.o

  • <command> — 要执行的调试监视器命令。
激活命令
命令 描述
on 开启调试监视器。
off 关闭调试监视器。
dbg_on 将调试信息从调试监视器重定向到内核调试器,并开启调试监视器(若尚未开启)。在 Windows 上,首次启用此选项时可能需要重启电脑。ondbg_on 命令可与 <level><sections> 参数一起使用。
dbg_off 停止将调试信息从调试监视器重定向到内核调试器。
dump 持续向命令提示符发送(转储)调试信息,直到用户选择停止(按照命令提示符中显示的说明操作)。
status 显示有关运行中驱动程序(<driver_name>)、当前调试监视器状态(包括调试监视器开启时的活动调试级别和章节)以及调试信息缓冲区大小的信息。
clock_on 为每条调试信息添加时间戳。时间戳相对于驱动程序加载时间或最后一次 clock_reset 命令的执行时间。
clock_off 不为调试信息添加时间戳。
clock_reset 重置调试信息时间戳时钟。
sect_info_on 为每条调试信息添加章节信息。
sect_info_off 不为调试信息添加章节信息。
help 显示用法说明。
无参数(包括无命令) 等同于运行 wddebug help
仅适用于 ondbg_on 命令的参数
参数 描述
<level> 要设置的调试跟踪级别 — 以下标志之一:ERRORWARNINFOTRACE(默认)。ERROR 是最低跟踪级别,TRACE 是最高级别(显示所有信息)。若设置了 <sections> 参数,则必须同时设置 <level> 参数(无默认值)。
<sections> 要监控的调试章节(即 WinDriver API 章节)。此参数可设置为 ALL(默认,监控所有受支持的调试章节),或包含任何受支持调试章节标志组合的带引号字符串(运行 wddebug help 查看完整列表)。
用法流程

要使用 wddebug 记录信息,请按以下流程操作:

  1. 运行 wddebug 并附带 ondbg_on 命令,开启调试监视器;后者会在开启调试监视器之前,将调试信息重定向到操作系统内核调试器。你可以使用 <level><sections> 参数设置日志的调试级别和章节。若未明确设置这些参数,将使用默认值;(注意,若设置了章节,必须同时设置级别)。你也可以在命令前指定重命名后的 WinDriver 驱动程序名称(默认:windrvr1650),以记录该驱动程序的信息 — 见 <driver_name> 参数。

  2. 若未选择将调试信息重定向到操作系统内核调试器(使用 dbg_on 命令),运行 wddebug 并附带 dump 命令,开始将调试信息转储到命令提示符。你可以随时按照命令提示符中显示的说明,关闭调试信息的显示。

  3. 运行使用该驱动程序的应用程序,查看正在记录到命令提示符/内核调试器的调试信息。

  4. 调试监视器运行期间,你可以随时运行 wddebug 并附带以下命令:

    • statusclock_onclock_offclock_resetsect_info_onsect_info_off

    • 带有不同 <level> 和/或 <sections> 参数的 ondbg_on

    • dbg_ondbg_off — 切换是否将调试信息重定向到操作系统内核调试器

    • dump — 开始将调试日志新转储到命令提示符;(可随时按照提示符中的说明停止转储)

  5. 完成后,运行 wddebug 并附带 off 命令,关闭调试监视器。

即使调试监视器处于关闭状态,也可使用 status 命令查看有关运行中 WinDriver 驱动程序的信息。

示例

以下是典型的 wddebug 用法流程示例。由于未设置 <driver_name>,命令将应用于默认驱动程序 windrvr1650

  1. 以最高跟踪级别开启调试监视器,监控所有章节:
wddebug on TRACE ALL
这与运行 `wddebug on TRACE` 相同,因为 `ALL` 是 `<sections>` 的默认值。
  1. 持续将调试信息转储到命令提示符或文件,直到用户选择停止:
wddebug dump
wddebug dump <filename>
  1. 之后,使用该驱动程序并在命令提示符中查看调试信息。

  2. 关闭调试监视器:

wddebug off

8.2.2.2 在测试机器上调试

要在未安装 WinDriver 的机器上调试 WinDriver 应用程序和驱动程序,请按以下步骤操作:

  1. WinDriver\util\wddebug.exe 复制到测试机器。

  2. 从目标机器的命令行运行 wddebug dump

  3. 在另一个窗口中运行你的应用程序。

  4. 使用 CTRL+C 停止 wddebug 工具。

8.3 常见问题解答(FAQ)

8.3.1 应使用 wddebug_gui 还是 wddebug?

为什么使用 wddebug_gui

  • 图形界面版本提供更便捷的搜索选项,在现代桌面操作系统上使用更舒适。

为什么使用 wddebug

  • 图形界面版本依赖 Qt,运行速度比控制台版本慢,在某些情况下,与应用程序同时运行时可能会降低应用程序的运行速度。

  • 若要在未安装 WinDriver 的机器(分发机器)上调试基于 WinDriver 的用户应用程序,在该机器上运行 wddebug_gui 会更复杂,因为需要安装或复制所有 Qt DLL/.so 依赖项,调试监视器才能工作。相比之下,wddebug 仅需要 wdapi 共享库(wdapi1650.dll/.so)。

  • wddebug 的源代码位于 WinDriver/samples/c/wddebug,这使你能够更灵活地修改该应用程序,以满足特定的调试需求。Jungo 不提供 wddebug_gui 的源代码。

  • wddebug 更易于在脚本或远程控制台会话(如 PowerShell、SSH 等)中使用。

8.3.2 能否使用 MS Visual Studio(Visual C++)轻松调试基于 WinDriver 的代码?

可以!你编写的设备驱动程序代码在正常的 Win32 用户模式下运行。因此,你可以使用 MS Visual Studio 编译和调试代码。通常,基于 WinDriver 的用户代码可在任何支持在 Windows 中编译 C/C++ 应用程序的 IDE 上调试。

8.3.3 如何推荐调试基于 WinDriver 的应用程序?

除了使用本章所述的 wddebug_gui / wddebug 外,我们还建议在需要时使用以下工具:

  • 基本用户模式开发:使用 IDE(如 Visual Studio / Visual Studio Code / XCode(MacOS))及其提供的调试器。其他推荐工具包括 valgrind(Linux)/ Dr. Memory(Windows),用于定位内存泄漏。

  • 调试对 WDAPI 共享库的调用:你可以使用其源代码(位于 WinDriver/src/wdapi)。

  • 内核调试(适用于内核插件或识别 WinDriver 相关问题):在 Windows 上,可使用 WinDbg / WinDbg Preview。有关如何设置这些工具的更多信息,可在 MSDN 上获取。在 Linux/MacOS 上,可使用 dmesg 查看内核崩溃信息。MacOS 还会在指定目录(通常为 ~/Library/Logs)中为每个应用程序或内核崩溃提供崩溃转储文件。


原文链接:https://windriver.jungo.com/manual/ch8_debugging_drivers.html

(注:文档内容由 AI 生成,翻译正确性不做保证,只做参考,请参对比原文进行浏览,对于由翻译引起的问题不负任何责任 By chencarl)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/997772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年质量好的酒店油烟管道清洗厂家质量评选榜(可靠) - 行业平台推荐

2025年质量好的酒店油烟管道清洗厂家质量评选榜(可靠)行业背景与市场趋势随着我国餐饮业和酒店业的蓬勃发展,油烟管道清洗行业迎来了快速增长期。据统计,2024年全国餐饮业总收入已突破5.2万亿元,酒店业规模达到68…

visual studio提示使用100缩放放比例重新启动

1打开注册表编辑器(WIN+R组合键,输入regedit)找到【计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers】 新建字符串值, 字符串的名称设置为visual studio的启动路径(…

2025年口碑好的双温防爆冰箱生产商推荐:看哪家产品质量好 - mypinpai

本榜单依托防爆制冷设备行业全维度市场调研与真实客户口碑反馈,深度筛选出五家标杆企业,覆盖双温防爆冰箱、实验室防爆冰箱、医用冷冻冷藏防爆冰箱等核心品类,为化工、制药、实验室等场景用户选型提供客观依据,助力…

2025年质量好的酒店油烟管道清洗/厨房油烟管道清洗厂家采购指南榜(选购必看) - 品牌宣传支持者

2025年质量好的酒店油烟管道清洗/厨房油烟管道清洗厂家采购指南榜(选购必看)行业背景与市场趋势随着餐饮业和酒店业的快速发展,厨房油烟管道清洗服务已成为保障食品安全、预防火灾隐患的重要环节。据中国烹饪协会数…

2025年中国铝合金精密管材品牌制造商推荐:电子用铝合金精密 - myqiye

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家标杆企业,为新能源、电子、汽车等领域企业选型提供客观依据,助力精准匹配适配的服务伙伴。 TOP1 推荐:常熟国强和茂管材有限公司 推荐指数:★★★★★ 口碑…

2025年五大药食同源特殊膳食OEM厂家排行榜,看哪家靠谱? - 工业品牌热点

为帮助健康产品经销商、渠道商高效锁定适配自身需求的特殊膳食OEM合作伙伴,避免因厂家资质不齐、生产标准不达标导致的供应链风险,我们从生产资质合规性(如SC、HACCP认证覆盖度)、技术研发实力(功能成分萃取工艺、…

2025年热门的大型排油烟机清洗厂家最新用户好评榜 - 行业平台推荐

2025年热门的大型排油烟机清洗厂家用户好评榜行业背景与市场趋势随着餐饮行业的蓬勃发展和环保法规的日益严格,大型排油烟机清洗服务已成为酒店、宾馆、食堂及商场等场所不可或缺的维保项目。2025年,中国餐饮油烟治理…

2025年五大胶原蛋白肽特殊膳食oem公司排行榜 - 工业推荐榜

为帮助健康食品品牌、渠道商精准锁定适配的特殊膳食OEM合作伙伴,规避生产标准不符、配方稳定性不足等选型风险,我们从生产资质合规性(如SC、HACCP、ISO22000认证覆盖度)、配方研发能力(药食同源成分萃取技术、功能…

2025年值得推荐的珠江电缆厂家TOP5排行榜,看哪家产品质 - mypinpai

为帮工程方、电力企业高效锁定适配需求的电缆供应商,避免陷入非标陷阱售后失联等采购坑,我们从产品品质合规性(如国标认证、检测能力)、供应链稳定性(产能规模、交货时效)、全周期服务能力(售前技术咨询、售后响…

2025年高品质铝合金精密管材五大推荐制造商,看哪家售后优? - myqiye

本榜单基于全维度市场调研与真实行业口碑,深度筛选十家标杆企业,重点考量技术实力、定制能力、供应链稳定性及客户反馈,为新能源、汽车、制冷等领域企业选型提供客观依据,助力精准匹配适配的高品质铝合金精密管材供…

压片糖果代加工哪家好?压片糖果代加工生产厂哪家专业? - 工业品牌热点

TOP1 推荐:山东佰诺生物科技有限公司 推荐指数:★★★★★ 口碑评分:行业内口碑的压片糖果代加工企业 专业能力:作为集研发、生产、品牌设计及健康管理集成于一体的生物科技公司,山东佰诺生物科技有限公司以佰炼品…

压片糖果代加工哪家好?哪家技术实力强?求推荐 - 工业推荐榜

TOP1 推荐:山东佰诺生物科技有限公司 推荐指数:★★★★★ 口碑评分:绿色功能性食品代加工标杆企业 专业能力:作为集研发、生产、品牌设计及健康管理集成于一体的生物科技公司,山东佰诺生物科技有限公司专注传统药…

2025年靠谱的餐饮店油烟机清洗厂家选购指南与推荐 - 品牌宣传支持者

2025年靠谱的餐饮店油烟机清洗厂家选购指南与推荐行业背景与市场趋势随着餐饮行业的快速发展,油烟机清洗服务已成为餐饮企业日常运营中不可或缺的一环。据2024年中国餐饮协会数据显示,全国餐饮门店数量已突破1000万家…

windriver 第7章:开发驱动程序

本章将引导你完成 WinDriver 驱动程序的开发周期。 7.1 使用 DriverWizard 构建设备驱动程序 你可以使用 DriverWizard 诊断设备并验证其是否按预期运行,还能为设备生成 C、C#、Visual Basic(仅支持 USB)、Java 和 …

国内专业全自动超纯水设备/水处理设备/反渗透设备生产厂家品牌推荐,可提供定制服务 - 品牌推荐大师1

苏州凯旭净化设备有限公司是一家专注于水处理工程设备设计、生产制造、销售、安装、售后维护等一站式的服务商。多年来不断地向客户提供行业赢领的水处理工程设备及服务解决方案、为用户打造安全、可靠、节能环保的水处…

2025年五大中医智能装备定制厂家排行榜,中医智能装备正规厂 - mypinpai

为帮助医疗机构、康养机构及科研单位精准锁定适配自身需求的中医智能装备合作伙伴,避免选型走弯路,我们从技术合规性(如二类医疗器械认证、专利数量)、定制化能力(批量定制适配性、场景化功能开发)、临床验证数据…

常熟国强和茂管材有限公司产品的市场认可度高吗?质量如何? - myqiye

在全球新能源产业爆发式增长的背景下,精密铝合金管材作为热管理、结构支撑的核心部件,市场需求年增速超35%。但行业普遍存在定制化匹配难、性能不达标、供应链不稳等痛点,23%的下游企业因管材问题导致生产延误或设备…

MAF快速入门(6)混合编排工作流

在实际业务场景中,Executor通常用来覆盖确定性的业务逻辑,例如:数据验证、数据格式化、数据清洗和计算等等,这类场景往往需要100%确定性。而Agent则用来覆盖AI智能决策的场景,例如:智能判断、理解 和 内容生成等…

2025年五大实力强的超级电容企业推荐,国内知名超级电容联系 - 工业品牌热点

在双碳战略与新型电力系统建设的浪潮下,超级电容作为高效储能利器,正成为能源、交通、航天等领域的核心支撑。面对市场上众多超级电容企业,如何找到技术过硬、产能稳定、服务可靠的合作伙伴?以下结合技术实力、产能…

2025山东功能性食品企业TOP5权威推荐:深度解析山东佰诺 - 工业推荐榜

随着健康消费升级,功能性食品市场规模持续扩张,2024年国内市场规模突破3500亿元,年增速达28%。但行业内同质化严重、研发实力参差不齐、生产标准不统一等问题凸显,30%的企业因缺乏核心技术陷入价格战,18%的产品因…