UE 打包游戏用 PIX Timing Capture 抓不到数据:Bootstrap 子进程问题
April 8, 2025About 2 min
UE 打包游戏用 PIX Timing Capture 抓不到数据:Bootstrap 子进程问题
用 PIX on Windows 对 UE 打包游戏做 Timing Capture,结果抓出来空空如也——没有 CommandQueue、没有 Thread、没有 marker 和 EventName。折腾下来根因是 attach 错了进程:抓的是外层 bootstrap 进程,而真正的游戏跑在它拉起的子进程里。
现象
按常规流程配置 PIX、点 Start Timing Capture,capture 里什么都没有——no CommandQueue, no Thread。
根因:UE 打包游戏是「外层 bootstrap + 真实游戏子进程」两层
UE 打包出来的可执行文件,点最外层那个程序时,它会跑 BootstrapPackagedGame 去启动真正的游戏进程。所以外层进程只是个引导壳,GPU 命令都在子进程里提交。PIX Timing Capture 的目标进程如果指向外层 bootstrap,自然什么都抓不到——真实渲染发生在子进程。
解法
两条路二选一:
- Detach 当前 bootstrap 进程,attach 到真实游戏进程:capture 启动后把 PIX 从 bootstrap 进程分离,重新 attach 到它拉起的真实游戏子进程。
- 直接运行真实游戏进程:绕过 bootstrap,直接启动子进程那个 exe,让 PIX 从一开始就盯着正确的目标。
Troubleshoot
- 优先用 DX12:PIX 对 DX12 的兼容性最好,能选就选 DX12,命令行加
-dx12。 - RenderDoc 有同样的问题:RenderDoc 抓 UE 打包游戏也会遇到「抓到的是 bootstrap 而非真实进程」。它的解法是勾上
Launch Application → Capture Child Processes,让它自动跟进子进程。
一句话
凡是「目标程序其实是个启动器/引导壳」的场景,GPU/CPU 抓帧工具都要确认自己 attach 的是真正干活的那个进程。UE 打包游戏、各种带 launcher 的程序都属于这一类,抓不到数据先怀疑进程层级。