技术关键字:mesa、log系统、环境变量
目录
前言
一、gdb或vscode的断点调试
二、mesa log 系统的使用
总结
前言
软件调试技术是要求软件开发人员必备的一项技能。不同的问题具有不同的调试手段和方法。本文从mesa库的实现特点入手,介绍两种基本的调试手段:断点调试和mesa log系统的调试。
一、gdb或vscode的断点调试
断点调试通常用来理解程序的执行流程。该方法可以让你快速的理解从一个已知函数为起点,到目标函数的调用栈。但mesa从C语言实现了面向对象的设计,因此使用了大量的函数指针,这对调试断点调试带来了一定的复杂度,又因为mesa支持不同厂家驱动,有时你不知道函数指针被赋值为哪个具体实现。这时,前文的mesa调用主线分析与理解就起到了作用,可以在对应层上加上断点,达到快速定位的作用。
二、mesa log 系统的使用
mesa的很多模块都有自己的log体系,每个体系里都有log等级。在调试时,通常设置debug等级,即可打印较多的信息供理解分析程序执行逻辑。这些log等级通常又是有环境变量控制,这种控制方式让你仅通过配置而不需要修改代码。下图是mesa前端模块的log系统相关的配置方法,至于gallium架构中的GPU-specific的驱动部分,各家有各家的实现,但方法一般都是:通过自有环境变量控制log等级和开关某些功能features的支持。
这里并没有给出glsl编译模块的log控制,留给大家自己去尝试了。
mesa 公共层的log等级设置
总结
通过本文和前面三篇文章的介绍,相信你当前对mesa有了一个大概的认识,你应该可以入手mesa,进行mesa的简单调试了。后续将对mesa的众多具体技术细节进行分析,包括mesa的dri相关的初始化、EGL初始化、mesa使用可编程管线实现固定管线、mesa对glsl的编译过程、mesa与xserver的送显交互、double\tripple buffer的实现、OpenGL具体features的实现等。