PLMDebug

PLMDebug.exe 是一种工具,可用于使用 Windows 调试器调试 Windows 应用,该应用在进程生命周期管理 (PLM) 下运行。 使用 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 []
显示已安装包的运行状态。 如果未指定 Package ,此命令将显示所有已安装包的运行状态。

/enableDebug [DebuggerCommandLine]
递增包的调试引用计数。 如果包具有非零调试引用计数,则不受 PLM 策略的限制。 每次调用 /enableDebug 必须与对 /disableDebug 的调用配对。 如果指定 DebuggerCommandLine,调试器将在启动包中的任何应用时附加。

/terminate
终止包。

/forceTerminate
强制终止包。

/cleanTerminate
暂停包,然后终止包。

/suspend
挂起包。

/resume
恢复包。

/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,该 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}

如果要保证任务激活,请先启用调试模式。 例如,当系统处于节电模式时,机会性任务(如 TimeTrigger 激活的任务)将不会激活。 在包上启用调试模式可确保系统忽略阻止激活的策略。

plmdebug /enabledebug MyApp_1.0.0.0_x64__tnq5r49etfg3c

然后使用所枚举的注册 GUID 激活所需任务。

plmdebug /activatebgtask “{50DB0363-D722-4E23-A18F-1EF49B226CC3}”

另请参阅

在 Visual Studio 中调试 UWP 应用时如何触发挂起、继续和后台事件

Windows 调试工具中包含的工具