Renderdoc 帧调试器
注意,本文只适用于分析/Debug 自己的应用
- https://renderdoc.org/docs/window/event_browser.html#browsing-the-frame
https://docs.unity3d.com/cn/2020.2/Manual/RenderDocIntegration.html
一、下载 RenderDoc
应该不太需要去编一个源码版的,所以可以直接可以去官网下最新,正常安装完毕后,重启 Unity,右键 Game/Scene 窗口可以发现多了一个选项,点击后右侧如果出现 RenderDoc 标志就说明成功
点击右侧标志后,RenderDoc 就会自动截帧并打开,不过需要注意的是,此时 RenderDoc 截的是 Unity 编辑器的帧,而不是你游戏本身,所以尽量保证截帧时你 Unity 只渲染了 Game 视图,不然后续渲染事件列表会比较乱,除非你有特殊的需求:比如想要看 Scene 视图的渲染事件等
打开后可以先检查下 RenderDoc 右侧是否打开了 TextureViewer MeshViewer PipeLineState 这三个窗口,如果没有的话需要在 Window 菜单里将它们打开,不然的话后续就没法看到运行时效果
二、Unity Shader 调试
2.1 定位渲染事件
对于下图:
- 渲染事件窗口,这个和 Unity 游戏里的 FrameDebug 用法很像
- 渲染事件列表,只是个序号
- 同②,你可以通过点击其中的轴来快速定位渲染事件
- 找到你想 Debugger 的具体事件,就可以在右侧看到具体信息了
RenderDoc VS FrameDebug:
2.2 查看 Texture 和 Mesh
在截帧之前,需要在你的 Shader 里面加一行 #pragam,不然你 RenderDoc 看不到 Shader 源码,只能看到编译后的:
#pragma enable_d3d11_debug_symbols
如果你想要查看当前的片段着色:
可以按照图中的步骤:菜单选择 Texture Viewer → 右击你想要 Debug 的像素坐标 → 右下角点击 Debug 按钮,其中
- 可以查看当前输出 Texture 的各通道数据
- 可以将当前 Texture 自动调整为合适的大小,能让你看到全图,或者使其上下翻转
- 可以看到当前所有的输入纹理及输出纹理
如果你想检查深度测试或者模板测试结果等其它信息,需要在 Overlay 中选择对应的类别,它默认值是"None"
如果你想查看当前的顶点着色:
更加简单:菜单选择 Mesh Viewer → 右击你想要 Debug 的面片 → 右下角点击 Debug 按钮
2.3 对 Shader 做断点
然后就是主菜:无论你 Debug 顶点着色器还是片段着色器,都可以在 1.2 步骤之后进入这个界面,这就是你熟悉的 Shader 了,并且会有箭头自动指向当前片段/顶点着色器的入口
Shader 列表中除了所有你当前内存中的 HLSL 文件以外,头两个文件:Disassembly 为当前 shader 编译后的汇编版本,temp.hlsl 为你当前执行的 shaderPass,一般来讲不用特别关心,因为工具往往会自动给你指向着色器的起点
可以和平常代码一样“断点”,并且是支持回溯的那种
- Step forwards/backwards over:F10/Shift+F10 相当于逐过程
- Step forwards/backwards into:F11/Shift+F11 相当于逐语句
- Step forwards/backwards out:Ctrl+F11/Shift+Ctrl+F11 相当于跳出
还有要注意的是:
- 当你连续点击两次渲染事件后再选中片段/顶点进行调试,可能会先进入 History 界面,这时你右键最新的 Event 并选择 Debug Pixel 即可
- 如果你找不到你的 shader,界面中只有 Disassembly 这一个选项,参考这一步,检查是否有误或者是否需要重新截帧
- 只有 DX 支持断点 Shader 源码,OpenGL 无指令支持
2.3.1 数据追踪
- 鼠标移动到相关变量上,可以直接追踪数值
- 常量区,部分常量可能无法用鼠标追踪,似乎目前不支持搜索
- 变量区
2.3.2 通过管线来查看 Shader
也很简单,考虑到能看到这里的各位都有基础,就不详细介绍下图中管线的具体内容了
三、真机 Debug 包调试
在此之前你需要完成 ADB 连接 Android 真机/模拟器 调试 对应文章的环境配置,并且确保电脑中有安装 Java jdk
确保一切环境配置准备就绪后,按照以下步骤进行:
- 手机连接电脑,可以 adb devices 以测试连接情况
- 打开 RenderDoc,菜单 → Tools → Settings → Andriod → 配置你的 SDK 和 Java jdk 路径,此时手机同时会自动安装 RenderDoc 对应的小程序,如果没有按照成功或者发现下一步找不到你的手机型号,请先确保你手机是否有禁用某些程序的自动安装等设置
等待一会,RenderDoc 左下角会出现你的手机型号,点击后当图标变为插头形状并且手机屏幕上出现 RenderDoc 界面的时候,即表示连接成功
3.1 截帧自己开发的游戏
连接成功后,确定你要截帧的游戏包名,然后进入 RenderDoc 的 Launch Application 界面,按照下述步骤找到自己的包并设置,你的包必须要确保是 Debugable 的,像正式包就不行
正式包你想要截帧,可能需要解包并修改调试权限,或者直接开启手机 Root 权限设置全局 Debugable,这一步比较复杂,除此之外,正式包的包名的确定也要一定步骤
最后点击右下角的 Launch,等待手机帮你打开游戏就 OK,然后就是和调试 Unity 一样的操作就行了,需要注意的是:调试的整个过程中你可能要随时注意左下角 RenderDoc 与手机的连接情况,以保证他是连接的状态
参考文章:
- https://zhuanlan.zhihu.com/p/74622572
- https://blog.csdn.net/DaisyCold/article/details/122602714
- https://blog.csdn.net/x_xingduo_2315/article/details/112614499
- https://blog.csdn.net/woodengm/article/details/121223524
- https://zhuanlan.zhihu.com/p/80704313
- https://zhuanlan.zhihu.com/p/40345308
- https://blog.csdn.net/linjf520/article/details/123355372
- https://zhuanlan.zhihu.com/p/91476074
Renderdoc 帧调试器相关推荐
- Eclipse 调试器(引用IT168)
Eclipse 调试器:零距离接触实战技巧 2011年11月25日01:29IT168 字号:T|T 调试的方法虽然千千万万,但归根结底,就是找到引发错误的代码.Eclipse调试器的目标是让程序员能 ...
- 如何一起破解图形化Python调试器
15分钟内从零调试 (Zero-to-Debugging in 15 mins) You don't realize the value of a debugger until you're stuc ...
- 调试器定位变量的原理
假设我们确实在do_stuff中的断点处停了下来.我们希望调试器能够告诉我们my_local变量的值,调试器怎么知道去×××到相关的信息呢?这可比定位函数要难多了,因为变量可以在全局数据区,可以在栈上 ...
- Linux调试——gdb调试器的简单使用调试coredump文件
文章目录 一.背景 二.gdb的指令与使用 1.gdb的基本指令. 2.gdb指令的简单使用 1.进入gdb模式 2.实例说明 三.调试coredump文件 前提:本质上是在调试程序崩溃之后的内存镜像 ...
- linux 源码 调试,开发一个Linux调试器(六):源码级逐步执行
我们计算编写这些函数异常简单的版本,但真正的调试器有 thread plan 的概念,它封装了所有的单步信息.例如,调试器可能有一些复杂的逻辑去决定断点的地位,然后有一些回调函数用于断定单步操作是否完 ...
- Visual Studio图形调试器详细使用教程(基于DirectX11)
前言 对于DirectX程序开发者来说,学会使用Visual Studio Graphics Debugger(图形调试器)可以帮助你全面了解渲染管线绑定的资源和运行状态,从而确认问题所在.现在就以我 ...
- gdb查看空指针 linux_5 个鲜为人知 GNU 调试器(GDB)技巧
了解如何使用 gdb 的一些鲜为人知的功能来检查和修复代码.-- Tim Waugh(作者) GNU 调试器 (gdb)是一种宝贵的工具,可用于在开发程序时检查正在运行的进程并解决问题. 你可以在特定 ...
- 最全Pycharm教程(10)——Pycharm调试器总篇
最全Pycharm教程(1)--定制外观 最全Pycharm教程(2)--代码风格 最全Pycharm教程(3)--代码的调试.执行 最全Pycharm教程(4)--有关Python解释器的相关配置 ...
- Linux 内核调试器 调试指南
Linux 内核调试器内幕 KDB 入门指南 Hariprasad Nellitheertha (nharipra@in.ibm.com), 软件工程师, IBM 简介: 调试内核问题时,能够跟踪内核 ...
最新文章
- Shuffle 相关
- TClientDataSet使用要点
- IOS 多层级路由导航控制器 NavigationControoller 实现路由切换
- WPF下递归生成树形数据绑定到TreeView上
- Loadrunner报错“Too many local variablesAction.c”解决方法
- GHOST镜像导入VHD的虚拟机
- 深入理解java虚拟机---JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)(十二)
- 【编程之美】java二进制实现重建
- 【网络安全】PGP/GPG优质教程汇总
- toastr 在js中的用法
- mysql生成随机姓名、手机号、日期
- 钓鱼网站检测技术的演进
- XCTF密码学(入门二)
- 几招最有效的防辐射的方法
- 机票预订系统活动图_机票预订ppt
- node 压缩图片_用图压批量压缩图片就这么简单
- Python3处理HTTP请求
- 微软声学回声消除demo AECMicArray的使用
- torch.save()模型的保存于加载
- 知到网课大美劳动期末考试试题答案集合
热门文章
- linux内核 usb转串口,Linux 使用usb转串口作为调试串口
- 吃饱没事做之———用windows自带的Hyper-v 创建的Linux虚拟机来和主机的windows系统互联。
- vivo的iQOO3学习小米冲击高端失败,无奈降价近千元清货
- 不止背包防丢,SwissDigital上架支持苹果Find My防丢器
- 产后抑郁和其它抑郁不同
- 清除文件计算机病毒是,清除计算机系统病毒文件的步骤
- oracle sum包含空值,实验 oracle sum null值相关
- Part 3R 导数应用与中值定理
- 微信服务号申请、认证、认证后申请商家支付接口
- 康耐视visionpro工具-卡尺工具-Caliper-简介