本文将介绍各类开发调试工具的主要用途以及使用方式
CPU
SimplePef
PerfDog
Perfetto
VTune
Superluminal
Unreal Insights
启动命令行中添加如下参数:
1 | -tracehost=主机ip -trace=default,cpu,memory,gpu -statnamedevent |
启动UnrealInsights后再启动进程,则会自动开始捕获性能数据
Android可修改UE4CommandLine.txt或通过adb shell setprop debug.ue.commandline \"启动参数\"
设置
框选范围后可在右侧Counter界面查看该段时间内的Counter数,用于统计一段时间内的平均开销
在日志窗口中点击某条日志后时间轴会定位到对应帧:
Android Studio Profiler
WPA & WPR
PerfSDK
XCode Instruments
GPU
Renderdoc
Renderdoc在Windows上采用DirectX模拟的方式Replay其它图形API,Android的Hook分为Layer与非Layer的形式
DirectX程序需使用D3D_DEBUG
创建Device
才能截帧,Android
需启用debuggable
当前存在的问题
- 贴图Preview
Mobile上的ASTC贴图无法正确显示,比如UE中某张贴图格式指定为BGRA,在Mobile上会被压缩为ASTC
由于PC上是以DX进行模拟,因此只能以RGBA进行显示,因此Renderdoc Preview会出现错误
- 运算精度
比如RGBA16F的贴图,由于IEEE 16Bit Float的有效精度为11位,最多显示2048。
当计算结果超出2048时,显示结果将会出现错误。
NSight
Snapdragon Profiler
- 查看带宽:GMEM Load/Store
Mali Offline Tool
Arm Graphics Tool
Adreno GPU
Android GPU Inspector
PVRTune
Radeon GPU Profiler
XCode
- Instruments
- Optimizing GPU performance
Memory
Adroid Address Sanitizer
HWAddress Sanitizer
Loli Profiler
Unreal Memory Report
Unreal LowLevelMemory
可使用PerfreportTool可视化CSV:
StompMalloc
该模式利用缺页机制实现检测,由于PC暂不支持Address Sanitizer,该方案依然可考虑使用
Unreal Memory Insights
ADB
1 | adb shell dumpsys memoryinfo |
XCode
- Address Sanitizer
- Zombie Object
- Malloc History
- Memory Graph
Decompile
IDA
Android真机调试
包体要求:
debuggable
为true: UE打包时ForDistribution设置为False即可
启动Android_Server
ADB连接手机后打开Android Studio,随便新建或打开一个项目,找到Device File Explorer
找到目标应用,如:/data/data/com.lilithgames.xgame.gp
,在其上右键, 选择Upload
在打开的文件选择框中选择android_server64(32位的选android_server),该文件位于:
- IDAPro安装目录/dbgsrv/android_server64
成功将android_server64上传至手机后,在cmd窗口执行:
- 进入shell环境:
adb shell
- 执行run-as:
run-as com.lilithgames.xgame.gp
- 提权:
chmod 777 android_server64
- 启动server:
1 | # android10及以上使用该命令 |
此时cmd窗口可见到监听23946端口的提示,接下来再开一个cmd窗口用于转发端口:
1 | adb forward tcp:23946 tcp:23946 |
Attach Debug
设置调试器:这里是用Remote ARM Linux/Android debugger
打开Process Option
,设置调试信息:
接下来选择Attach To Process
并选择目标进程进行挂载:
其它命令:
- 查询端口占用:adb shell netstat -tulpn
- 提权:adb shell chmod 777 /data/local/android_server64
- 读取so BuildID: readelf -n xxx.so
Comments