BuGLe—OpenGL 调试封装器

作者:John Knight

BuGLe 是一款用于 OpenGL 调试的工具,实现为一个封装库,位于您的程序和 OpenGL 之间。虽然它仍在开发中,但网站声明它已经可以做到以下几点:

  • 转储所有 GL 调用的文本日志。
  • 截取屏幕截图或捕获视频。
  • 在每次调用后调用 glGetError 以检查错误,并封装 glGetError,使此检查对您的程序透明。
  • 捕获并显示统计信息(例如帧率)。
  • 强制线框模式。
  • 从驱动程序内部的段错误中恢复回溯,即使驱动程序在没有符号的情况下编译。

此外,还有一个调试器 (gldb-gui),可让您设置断点并检查回溯。它还允许您检查 OpenGL 状态、着色器、纹理、缓冲区等等,并进入 gdb 以查看哪里出了问题。

BuGLe 是一款强大的封装工具,可以在调用指定的 OpenGL 函数时对程序执行某些操作。

调试器也可以在程序运行时同时使用。

安装

BuGLe 目前仅以源代码形式提供,因此请访问网站并获取最新的 tarball。至于要求,网站上说您需要以下内容:

  • GCC 3.2 或更高版本(4.0 已损坏,但 4.1 可以工作)。
  • 视频捕获需要 FFmpeg。
  • 建议使用 GNU readline 以在 gldb 中进行历史记录编辑。
  • gldb-gui 需要 GTK+。
  • 强烈建议 gldb-gui 使用 GtkGLExt 和 GLEW(没有它们,纹理显示将无法工作)。

我发现我还必须获取 libgtkglext1-dev 以及 libreadline5-dev 才能访问一些非常重要的功能。我无法让我的系统识别 libavcodec,这可能在稍后给我带来了一些问题。

至于编译,文档说您只需首先运行 make 即可开始,但我发现我必须首先运行 configure 脚本,否则 make 将返回错误。如果我没错,那么您需要运行以下命令:

$ ./configure
$ make

如果您的发行版使用 sudo

$ sudo make install

如果您的发行版不使用 sudo

$ su
# make install

接下来部分,我将直接引用文档:

接下来,您需要为将运行 bugle 的用户安装一些文件。创建一个目录 $HOME/.bugle,并将 doc/examples/filters 和 doc/examples/statistics 复制到其中。

用法

好的,我必须跟您说实话,我没有让 BuGLe 按照我想要的方式运行(例如截取屏幕截图、视频等等)。也许是 configure 脚本的问题,也许是 libavcodec 未检测到,或者也许我只是太笨,错过了界面中的某些东西。我不知道。那么我为什么还要强调这个程序呢?我看到了这里蕴藏的巨大潜力,以及未来对于 IT 行业中的任何人来说都可能非常强大的东西。

我真正能做的就是指引您了解 BuGLe,并希望您比我更幸运。我确实让一些功能可以工作,包括一些调试,所以我至少会向您展示一些像我这样的凡人设法掌握的基础知识。

要在命令行运行 BuGLe,请使用以下语法:

$ LD_PRELOAD=libbugle.so your-program [plus any arguments]

要使用 GUI 版本(更容易),请使用此语法:

$ gldb-gui your-program [plus any arguments]

最后一个命令启动 BuGLe 的 GUI,但您的程序尚未运行。在运行任何程序之前,您可以应用某些参数,例如在指定的 OpenGL 函数上设置断点。有关此信息,请查看网站的文档(虽然在撰写本文时,它似乎更多地面向其他开发人员而不是用户)。

要实际运行您的程序,就像单击“运行”→“运行”一样简单。您可以通过单击“运行”→“停止”手动停止程序。程序可以通过“运行”→“继续”继续,或者通过“运行”→“步进”继续到下一个 OpenGL 函数调用,并通过“运行”→“杀死”杀死。同样值得一看的是调试控制台,在“运行”→“附加 GDB”下,它有自己独特的功能和命令集。

虽然我无法弄清楚如何自己运行这些功能,但在在线文档中,我找到了以下使用屏幕截图/视频捕获过滤器集的说明。

对于直接屏幕截图:

filterset screenshot
{
    filename "screenshot.ppm"
    key_screenshot "C-A-S-S"
}

对于捕获的视频:

filterset screenshot C-V inactive
{
    video "yes"
    filename "video.avi"
    codec "mpeg4"
    bitrate "1000000"
    allframes "no"
}

我可能在 BuGLe 的更大功能方面不太走运,但这毕竟是早期阶段的软件。当这个项目成熟后,编码及其产生的可能性无疑将非常强大——无论您是测试最新驱动程序的图形开发人员,还是像我这样的记者希望从程序内部截取屏幕截图。当这种情况发生时,可能会有人推出第二个 GUI,以另一种方式使用其功能,例如家庭用户拍摄他们正在运行的任何程序的视频。无论如何,该项目的潜在用途非常巨大。

BuGLe—OpenGL 调试封装器:www.opengl.org/sdk/tools/BuGLe

加载 Disqus 评论