调试工具

Pyglet包括许多调试路径,可以在应用程序启动期间或之前启用这些路径。开发这些工具主要是为了帮助调试Piglet本身,但是其中一些也可能被证明对理解和调试Piglet应用程序很有用。

每个调试选项都是 pyglet.options 字典。在导入任何其他模块之前,可以直接在词典上设置选项:

import pyglet
pyglet.options['debug_gl'] = False

还可以在导入pyglet之前使用环境变量设置它们。每个选项对应的环境变量是字符串 PYGLET_ 大写选项键的前缀。例如,的环境变量 debug_glPYGLET_DEBUG_GL 。使用设置或取消设置布尔选项 10 价值观。

下表中列出了调试环境变量的摘要。

选择权

环境变量

类型

debug_font

PYGLET_DEBUG_FONT

布尔尔

debug_gl

PYGLET_DEBUG_GL

布尔尔

debug_gl_trace

PYGLET_DEBUG_GL_TRACE

布尔尔

debug_gl_trace_args

PYGLET_DEBUG_GL_TRACE_ARGS

布尔尔

debug_graphics_batch

PYGLET_DEBUG_GRAPHICS_BATCH

布尔尔

debug_lib

PYGLET_DEBUG_LIB

布尔尔

debug_media

PYGLET_DEBUG_MEDIA

布尔尔

debug_trace

PYGLET_DEBUG_TRACE

布尔尔

debug_trace_args

PYGLET_DEBUG_TRACE_ARGS

布尔尔

debug_trace_depth

PYGLET_DEBUG_TRACE_DEPTH

集成

debug_win32

PYGLET_DEBUG_WIN32

布尔尔

debug_x11

PYGLET_DEBUG_X11

布尔尔

这个 debug_mediadebug_font 选项用于调试 pyglet.mediapyglet.font 模块。它们的行为依赖于平台,并且仅对pyglet开发人员有用。

其余的调试选项将在下面详细说明。

调试OpenGL

这个 debug_graphics_batch 选项导致所有 Batch 对象在进行任何更改后,在绘制之前将其呈现树转储到标准输出(因此同一树的两个绘制只会转储一次)。这对于调试使用 GroupBatch 渲染。

错误检查

这个 debug_gl 选项拦截大多数OpenGL调用和调用 glGetError 之后(它只在这样的调用合法的情况下才会这样做)。如果报告错误,则立即引发异常。

此选项默认情况下处于启用状态,除非 -O 标志(优化)被赋予了Python,或者脚本是从一个py2exe或py2app包中运行的。

追踪

这个 debug_gl_trace 选项会导致将调用的所有OpenGL函数转储到标准输出。当与 debug_gl_trace_args ,还会打印提供给每个函数的参数(如有必要,可将它们缩写,以避免转储大量缓冲区数据)。

跟踪执行

这个 debug_trace 选项启用了Python范围的函数跟踪。这会导致每个函数调用都打印到标准输出。由于仅初始化pyglet就需要大量的函数调用,因此建议在使用此选项时将标准输出重定向到文件。

这个 debug_trace_args 选项还会将参数打印到每个函数调用。

什么时候 debug_trace_depth 大于1每个函数的调用方(S)(以及它们的参数,如果 debug_trace_args 设置)也会打印出来。每个调用方都缩进到被调用方的下方。默认深度为1,指定不打印调用方。

平台特定的调试

这个 debug_lib 选项使每个装入的库的路径打印到标准输出。这是由未记录在案的 pyglet.lib 模块,它在Linux和Mac OS X上有时必须遵循复杂的过程才能找到正确的库。在Windows上,并非所有的库都是通过此模块加载的,因此不会打印它们(但是,加载Windows DLL非常简单,几乎不需要此信息)。

Linux

X11错误被Piglet捕获并被抑制,因为在野外有大量的X服务器生成可以安全地忽略的错误。这个 debug_x11 选项导致将这些错误转储到标准输出,以及对Python堆栈的回溯(这可能与错误对应,也可能不对应,这取决于它是否被异步报告)。

窗口

这个 debug_win32 选项会使所有库调用都进入 user32.dllkernel32.dllgdi32.dll 被截获。在每次库调用之前 SetLastError(0) 被调用,然后 GetLastError() 被称为。发现的任何错误都会写入一个名为 debug_win32.log 。请注意,只有当被调用的函数返回错误代码时,错误才有效,但拦截函数不检查这一点。