当前位置:网站首页>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 调试难度很高,但是用来吹水还是可以
虽然有官方文档,但相信我,很少有小伙伴能按照官方文档说的调试
边栏推荐
- 密码学系列之:PEM和PKCS7,PKCS8,PKCS12
- 腾讯云胡启明:Kubernetes云上资源的分析与优化
- After the tester with 10 years of service "naked resignation" from the big factory...
- MySQL stored procedure introduction, creation, case, delete, view "recommended collection"
- Five Minutes Introductory Text Processing Three Musketeers grep awk sed
- 无代码平台字段设置:基础设置入门教程
- How to make good use of builder mode
- win10终端中如何切换磁盘
- 【TypeScript】深入学习TypeScript枚举
- Comic | Two weeks after the boss laid me off, he hired me back and doubled my salary!
猜你喜欢
随机推荐
刷题-洛谷-P1304 哥德巴赫猜想
After the tester with 10 years of service "naked resignation" from the big factory...
如何进行AI业务诊断,快速识别降本提效增长点?
明明加了唯一索引,为什么还是产生了重复数据?
刷题-洛谷-P1319 压缩技术
win10 uwp 修改图片质量压缩图片
零知识证明——zkSNARK证明体系
关于 SAP 电商云 Spartacus UI SSR 的 state transfer 问题
【随记】新一天搬砖 --20220727
长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物量估算与趋势分析等领域中的应用
xss课堂内容复现
vs Code runs a local web server
常用正则表达式[通俗易懂]
node 的运行命令
格密码入门
Interviewer: How is the expired key in Redis deleted?
How to carry out AI business diagnosis and quickly identify growth points for cost reduction and efficiency improvement?
Win10 uwp use ScaleTransform magnify an element
QT(42)-QT线程-线程调用槽函数
【Web漏洞探索】跨站脚本漏洞