Unity构建中使用Instrumentation性能分析的问题求助
问题描述
我尝试在Unity构建版本上运行插桩式性能分析器(instrumentation profiler),以定位调用最频繁、耗时最长的函数。我创建了导入Unity的C#类库,可正常调试,但无法启动Visual Studio Profiler对其进行插桩分析,遇到以下问题:
- 在Unity中未找到instrumentation功能,或启用后运行数分钟就崩溃,抛出大量异常:
ThreadDeserializer should not parse more data once it has been marked as terminated - 已尝试的操作:
- 将VS附加到Unity播放模式,但instrumentation选项未激活;
- 开启Unity的Debug选项、复制PDB、启用深度分析,尝试在Visual Studio中直接分析.exe文件时,报错:
Unable to obtain debugging information. PRF0002: The instrumentation with those options has failed; - 运行应用程序.exe并附加VS调试器,此时instrumentation选项可用,但之前的崩溃问题仍存在。
请问我遗漏了什么步骤?
解决方案
一、修复PRF0002错误
校准Unity构建配置
- 选择Debug/Development Build模式,必须勾选
Copy PDB Files(VS获取调试信息的核心前提);若仅分析自定义C#类库,可暂时关闭Enable Deep Profiling Support(避免插桩过载);取消Wait For Managed Debugger等非必要选项,减少流程干扰。 - 构建输出目录选非系统盘、无中文/特殊字符的路径,规避权限或解析问题。
- 选择Debug/Development Build模式,必须勾选
调整VS插桩设置
- 打开VS性能分析器(
Debug > Performance Profiler),选择目标.exe后进入Advanced Settings:- 取消勾选
Instrument native code(Unity原生代码插桩易触发兼容性问题); - 仅勾选
Instrument managed code,并手动指定你的自定义C#类库程序集(避免插桩Unity自带的大量程序集,引发PRF0002错误); - 若用VS2022及以上版本,确认已安装
.NET Profiling Tools组件(在VS安装器的Individual components中勾选)。
- 取消勾选
- 打开VS性能分析器(
二、解决ThreadDeserializer崩溃异常
缩小插桩范围
- 绝对不要对Unity核心程序集(如
UnityEngine.dll、UnityEditor.dll)插桩,仅勾选你自己编写的C#类库。插桩过多程序集会导致线程序列化器过载,触发目标异常。 - 在VS性能分析器的
Instrumentation设置中,点击Select assemblies,只保留自定义类库,排除所有Unity相关程序集。
- 绝对不要对Unity核心程序集(如
规避Profiler冲突
- 运行构建后的.exe前,完全关闭Unity Editor,避免内置Profiler与VS插桩Profiler的线程处理逻辑冲突。
三、可靠的插桩分析流程
如果直接分析.exe仍有问题,可采用以下步骤:
- 构建Unity项目为Development Build,勾选
Copy PDB Files和Script Debugging,不勾选Enable Deep Profiling Support; - 启动构建后的.exe程序;
- 在VS中选择
Debug > Attach to Process,选中目标Unity.exe进程; - 打开性能分析器,选择
Instrumentation选项,仅勾选自定义C#类库; - 点击
Start开始分析,运行场景后点击Stop生成报告。
四、额外注意事项
- 确保VS与Unity版本兼容:推荐VS2022搭配Unity 2021及以上版本,旧版本兼容性问题较多;
- 关闭第三方杀毒/防火墙,避免拦截VS插桩工具修改程序集;
- 若自定义类库用IL2CPP编译,需在Unity构建时勾选
Enable Script Debugging for IL2CPP,并确保VS安装了IL2CPP Debugging Tools组件。
内容的提问来源于stack exchange,提问作者user2088807
相关产品推荐
相关产品推荐

