当前位置:网站首页>win10 uwp 使用 WinDbg 调试
win10 uwp 使用 WinDbg 调试
2022-08-04 20:51:00 【林德熙】
本文告诉大家如何用 WinDbg 调试 UWP 应用,使用 WinDbg 调试是在没有其他手段的时候才进行的调试,因为调试难度特别大。我最近因为发现有 Edge 和其他 UWP 程序打不开的问题,然而我没有 Edge 和其他 UWP 的源代码,于是我只能通过 WinDbg 去调试 UWP 程序
找到工具
请不要在网上去下载 WinDbg 工具,请在安装完成 VisualStudio 安装对应的开发包,例如 UWP 的 17763 这个 sdk 开发包,调试工具将在开发包里面
如果想要调试 UWP 程序,那么不能使用古老的 6.12 版本调试,这个版本的 WinDbg 的路径在 "C:\Program Files\Debugging Tools for Windows (x64)\windbg.exe" 也就是文档里面说的路径,打开这个路径的程序,可以看到版本号如下
6.12.0002.633用这个版本输入下面代码将会提示 Syntax error in '.querypackages' 也就是不支持 UWP 调试
.querypackages
^ Syntax error in '.querypackages'在安装完成 Windows 10 SDK 之后,可以在 C:\Program Files (x86)\Windows Kits\10\Debuggers 里面找到对应的 x86 和 x64 等版本的工具,打开之后可以从标题栏看到版本号,要求的版本号是 10.0 以上
附加进程调试
附加到 UWP 程序的方法和附加到普通的程序的方法相同,但是附加到 UWP 程序调试的难度会比较大,因为 UWP 程序在调试过程可能就被挂起
在 WinDbg 的 File 里面点击附加到进程,快捷键是 F6 找到对应的进程就可以附加
建议的方法是通过任务管理器找到对应的进程的进程号,然后在附加进程里面输入,这样的附加效率比较快
附加调试完成之后做什么就看你技术了
下面图片是我附加调试到照片程序
启动 UWP 程序
通过启动的时候进行调试比较好的方法,需要使用命令行方式启动 windbg 程序,使用下面命令
windbg.exe -plmPackage <PLMPackageName> -plmApp <ApplicationId> [<parameters>]可以从命令看到需要两个参数,一个是 PLMPackageName 一个是 ApplicationId 下面让我告诉大家如何拿到这两个参数
第一个参数需要在 windbg 命令行输入 .querypackages 命令,而默认打开的 windbg 是不提供命令行的,此时就需要让 windbg 进入调试,这样才能输入命令
打开 WinDbg 程序,随意附加到一个可以附加的进程,例如 QQ 程序,这时可不要选 DWM 或 Explorer 调试,如果你好奇为什么,那么请保存好你的所有代码,然后附加一下
附加到任意的进程是为了可以在 Windbg 里面输入命令,附加之后点击暂停
这样就可以在命令行输入内容了
输入 .querypackages 命令可以列出本机所有安装的 UWP 程序,看起来内容很多,不过好在菜单里面的 Edit 有 Find 的功能,可以查找字符串,用这个方法查找到需要调试的 UWP 程序可以看到他的信息
如用我的图床为例
Package Full Name: 43179.1161685EE70AE_2.5.0.0_x64__ajj8jc175maf4
Package Display Name: uwp 图床
Version: 2.5.0.0
Processor Architecture: x64
Publisher: CN=227D1644-D24B-430C-AFA3-3FD86CE65409
Publisher Display Name: 林德熙
Install Folder: C:\Program Files\WindowsApps\43179.1161685EE70AE_2.5.0.0_x64__ajj8jc175maf4
Package State: Running
AppId: App这里的 Package Full Name 就是对应的 PLMPackageName 的参数,而 AppId 就是对应的第二个参数,当然还有另一个方法拿到 AppId 的值
知道了全名,可以通过在 C:\Program Files\WindowsApps\ 路径找到对应的包,也就是拼接路径 C:\Program Files\WindowsApps\全名 例如照片的路径
C:\Program Files\WindowsApps\Microsoft.Windows.Photos_2019.19061.18920.0_x64__8wekyb3d8bbwe在这个路径里面可以找到 AppxManifest.xml 文件,也就是 C:\Program Files\WindowsApps\全名\AppxManifest.xml 在这个文件里面将会记录 id 是什么
在知道了 PLMPackageName 和 ApplicationId 就可以通过命令行打开 WinDbg 启动调试
windbg.exe -plmPackage 43179.1161685EE70AE_2.5.0.0_x64__ajj8jc175maf4 -plmApp App 上面代码就可以打开我的图床进入调试
挂起应用
有一些 UWP 程序在调试过程就 gg 了,一个可以使用的方法是在进行符号加载的时候先将他挂起
在 UWP 运行的时候,有以下状态 suspend 和 resume 详细请看 Windows 10 UWP App lifecycle - Windows UWP applications
可以使用下面命令
.suspendpackage <PLMPackageName> 这里的 PLMPackageName 就是上面拿到的应用全名,用我刚才启动调试的图床为例,请看代码
.suspendpackage 43179.1161685EE70AE_2.5.0.0_x64__ajj8jc175maf4执行之后软件就挂起了,让软件继续执行的方法是 .resumepackage 请看代码
.resumepackage <PLMPackageName> 和上面相同,用被挂起的图床作为例子,先点击 break 进入断点,然后在命令行输入代码,请看下图
输入代码之后按下回车,将会有以下提示
The "resumePackage" action will be completed on next execution.此时点击继续按钮就可以
还有其他更多的命令就请小伙伴去看文档,虽然在 UWP 里面用 windbg 调试难度很高,但是用来吹水还是可以
虽然有官方文档,但相信我,很少有小伙伴能按照官方文档说的调试
边栏推荐
猜你喜欢

DICOM医学影像协议

微信小程序云开发 | 赠、删、改城市名称信息的应用实现

构建Buildroot根文件系统(I.MX6ULL)
![[Data Mining] Written Exam Questions for Sohu Data Mining Engineers](/img/d9/450eeecd5c7835d40ac38da41fc08e.png)
[Data Mining] Written Exam Questions for Sohu Data Mining Engineers

手撕SparkSQL五大JOIN的底层机制

ADB 安装 + 打驱动全教程

Comic | Two weeks after the boss laid me off, he hired me back and doubled my salary!

c语言小项目(三子棋游戏实现)

零知识证明笔记——私密交易,pederson,区间证明,所有权证明

某男子因用本地虚拟机做压测,惨遭字节面试官当场嘲笑
随机推荐
Web3时代的战争
linkboy 5.0 正式发布,新增语音识别、图像识别
How to carry out AI business diagnosis and quickly identify growth points for cost reduction and efficiency improvement?
【1403. 非递增顺序的最小子序列】
Zero-knowledge proof - zkSNARK proof system
vscode离线安装插件方法
QT(42)-QT线程-线程调用槽函数
ASP.NET商贸进销存管理系统源码(带数据库文档)源码免费分享
Win10 uwp use ScaleTransform magnify an element
新式茶饮,卷完水果还能卷什么?
零知识证明——zkSNARK证明体系
【数据挖掘】搜狐公司数据挖掘工程师笔试题
五分钟入门文本处理三剑客grep awk sed
xss课堂内容复现
QT(41)-多线程-QTThread-同步QSemaphore-互斥QMutex
【手把手教你使用STM32HAL库的串口空闲中断】
node 的运行命令
Tensorflow2 环境搭建
明明加了唯一索引,为什么还是产生了重复数据?
Chrome安装zotero connector 插件