如果程序中的表达式生成的值包含循环列表结构,Edebug 尝试打印该值时可能会报错。
处理循环结构的一种方法是设置 print-length 或 print-level 来截断打印内容。
Edebug 会自动帮你完成这一操作:
它会将 print-length 和 print-level 绑定为变量 edebug-print-length 和 edebug-print-level 的值(只要这些值为非nil)。
详见 See 影响输出的变量。
若值为非nil,Edebug 在打印结果时会将 print-length 绑定为此值。默认值为 50。
若值为非nil,Edebug 在打印结果时会将 print-level 绑定为此值。默认值为 50。
你也可以将 print-circle 绑定为非nil 值,
从而更清晰地打印循环结构和包含共享元素的结构。
以下是创建循环结构的代码示例:
(setq a (list 'x 'y)) (setcar a a)
如果 print-circle 为非nil,打印函数(如 prin1)会将 a 打印为 ‘#1=(#1# y)’。
其中 ‘#1=’ 标记其后的结构为标签 ‘1’,而 ‘#1#’ 则引用此前标记的该结构。
这种标记法也适用于列表或向量中所有共享的元素。
若值为非nil,Edebug 在打印结果时会将 print-circle 绑定为此值。默认值为 t。
关于如何自定义打印行为的更多细节,见 see 输出函数。