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]
显示已安装包的运行状态。 如果 未指定 包,此命令将显示所有已安装包的运行状态。

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

/terminatePackage
终止包。

/forceTerminatePackage
强制终止包。

/cleanTerminatePackage
挂起包,然后终止包。

/suspendPackage
挂起包。

/resumePackage
恢复包。

/disableDebugPackage
缩小包的调试引用计数。

/enumerateBgTasksPackage
枚举包的后台任务 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}

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

plmdebug /enabledebug MyApp_1.0.0.0_x64__tnq5r49etfg3c

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

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

另请参阅

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

Windows 调试工具中包含的工具