PLMDebug
PLMDebug.exe是一种工具,可用于使用 Windows 调试器调试进程生命周期管理(PLM)下运行的 Windows 应用。 使用 PLMDebug,可以手动控制暂停、恢复和终止 Windows 应用。
使用 Windows 10 版本 1607 或更高版本提示 ,可以使用 UWP 命令(如 .createpackageapp)调试 UWP 应用。 有关详细信息,请参阅 使用 WinDbg 调试 UWP 应用。
在何处获取 PLMDebug
PLMDebug.exe包含在 Windows 调试工具中。
plmdebug /query [Package]
plmdebug /enableDebug Package [DebuggerCommandLine]
plmdebug /terminate Package
plmdebug /forceterminate Package
plmdebug /cleanterminate Package
plmdebug /suspend Package
plmdebug /resume Package
plmdebug /disableDebug Package
plmdebug /enumerateBgTasks Package
plmdebug /activateBgTask "{TaskID}"
参数
包
包的全名或正在运行的进程 ID。
DebuggerCommandLine
用于打开调试器的命令行。 命令行必须包含调试器的完整路径。 如果路径有空格,则必须用引号括起来。 命令行还可以包含参数。 以下是一些示例:
"C:\Program Files (x86)\Windows Kits\8.0\Debuggers\x64\WinDbg.exe"
"\"C:\Program Files\Debugging Tools for Windows (x64)\WinDbg.exe\" -server npipe:pipe=test"
/query [包]
显示已安装包的运行状态。 如果未 指定包 ,此命令将显示所有已安装包的运行状态。
/enableDebug 包 [DebuggerCommandLine]
递增包的调试引用计数。 如果包具有非零调试引用计数,则包不受 PLM 策略的豁免。 对 /enableDebug 的每个调用都必须与对 /disableDebug 的调用配对。 如果指定 DebuggerCommandLine,则启动包中的任何应用时,调试器将附加。
/终止 包
终止包。
/forceTerminate 包
强制终止包。
/cleanTerminate 包
暂停并终止包。
/暂停 包
挂起包。
/恢复 包
恢复包。
/disableDebug 包
递减包的调试引用计数。
/enumerateBgTasks 包
枚举包的后台任务 ID。
/activateBgTask“{TaskId}”
激活后台任务。 请注意,并非所有后台任务都可以使用 PLMDebug 激活。 TaskID 必须用大括号和引号括起来。 例如:
plmdebug.exe /activatebgtask "{29421c11-1e1a-47a4-9121-949ce9e25456}"
注解
在调用任何挂起、恢复或终止函数之前,必须调用 plmdebug /enableDebug 。
PLMDebug 工具调用 IPackageDebugSettings 接口的方法。 通过此接口,你可以手动控制应用的流程生命周期管理。 通过此接口(因此,通过此工具),可以暂停、恢复和终止 Windows 应用。 请注意,IPackageDebugSettings 接口的方法适用于整个包。 暂停、恢复和终止会影响包中当前正在运行的所有应用。
示例
示例 1
启动应用时附加调试器
假设你有一个名为 MyApp 的应用,该应用位于名为 MyApp_1.0.0.0_x64__tnq5r49etfg3c 的包中。 通过显示所有已安装软件包的全名和运行状态来验证软件包是否已安装。 在命令提示符窗口中输入以下命令。
plmdebug /query
Package full name: 1daa103b-74e1-426d-8193-b6bc7ed66fed_1.0.0.0_x86__tnq5r49etfg3c
Package state: Terminated
Package full name: 41fb5f27-7b60-4f5e-8459-803673131dd9_1.0.0.0_x86__tnq5r49etfg3c
Package state: Suspended
...
Package full name: MyApp_1.0.0.0_x64__tnq5r49etfg3c
Package state: Terminated
...
递增包的调试引用计数,并指定在启动应用时希望 WinDbg 附加。
plmdebug /enableDebug MyApp_1.0.0.0_x64__tnq5r49etfg3c “C:\Program Files (x86)\Windows Kits\8.0\Debuggers\x64\WinDbg.exe”
启动应用时,WinDbg 将附加并中断。
完成调试后,分离调试器。 然后递减包的调试引用计数。
plmdebug /disableDebug MyApp_1.0.0.0_x64__tnq5r49etfg3c
示例 2
将调试器附加到正在运行的应用
假设要将 WinDbg 附加到已在运行的 MyApp。 在 WinDbg 的文件菜单中,选择附加到进程。 记下 MyApp 的进程 ID。 假设进程 ID 为 4816。
递增包含 MyApp 的包的调试引用计数。
plmdebug /enableDebug 4816
在 WinDbg 的 “附加到进程 ”对话框中,选择进程 4816,然后选择“ 确定”。 WinDbg 将附加到 MyApp。
完成 MyApp 调试后,分离调试器。 然后递减包的调试引用计数。
plmdebug /disableDebug 4816
示例 3
手动暂停和恢复应用
假设你想要手动暂停和恢复应用。 首先,递增包含应用的包调试引用计数。
plmdebug /enableDebug MyApp_1.0.0.0_x64__tnq5r49etfg3c
挂起包。 应用的挂起处理程序会被调用,这对于调试非常有用。
plmdebug /suspend MyApp_1.0.0.0_x64__tnq5r49etfg3c
调试完成后,继续运行包。
plmdebug /resume MyApp_1.0.0.0_x64__tnq5r49etfg3c
最后,递减包的调试引用计数。
plmdebug /disableDebug MyApp_1.0.0.0_x64__tnq5r49etfg3c
示例 4
手动激活后台任务
若要手动激活后台任务进行调试,可以查询已注册的后台任务列表,然后通过 plmdebug 激活它。
首先查询已注册的后台任务集:
plmdebug /enumeratebgtasks MyApp_1.0.0.0_x64__tnq5r49etfg3c
Package full name is MyApp_1.0.0.0_x64__tnq5r49etfg3c.
Background Tasks:
SampleTask : {50DB0363-D722-4E23-A18F-1EF49B226CC3}
如果要保证任务激活,请先启用调试模式。 例如,当系统处于节电模式时,时间Trigger 激活的任务等机会性任务将不会激活。 在包上启用调试模式可确保系统忽略阻止激活的策略。
plmdebug /enabledebug MyApp_1.0.0.0_x64__tnq5r49etfg3c
然后使用所枚举的注册 GUID 激活所需的任务。
plmdebug /activatebgtask “{50DB0363-D722-4E23-A18F-1EF49B2226CC3}”