如何debuggingelisp?
通常最简单的debugging方法是使用printf
。 我能做些什么来debuggingemacs-lisp? 如何从elisp打印emacs编辑器? 或者有什么方法来debuggingelisp代码?
例如,如何检查以下代码是否在.emacs
文件中运行?
(load "auctex.el" nil tt)
debugging器(edebug)非常简单易用。 转到该函数的定义,然后键入Mx edebug-defun 。 下一次调用时,您可以像其他所有debugging器一样单步执行代码。 types? 查询键盘列表,或查看edebug的文档。
GNU Emacs中有两个debugging器:
- edebug – 在这里的另一篇文章解释
- debugging
我使用debug
。 这些是常用的入口点(使用方法):
-
Mx debug-on-entry
后跟您要使用debugging器input的函数。 -
Mx toggle-debug-on-error
–Mx toggle-debug-on-error
inputdebugging器。 -
Mx toggle-debug-on-quit
– 当用户点击Cg时inputdebugging器。 - 将显式调用置于代码中特定位置(断点)的
debug
function,以在这些位置inputdebugging器:
(debugging)
您使用d或c跳过debugging器,跳过特定评估的详细信息。
这对打印值很有用
(message "Hello (%s)" foo)
但对于数据结构来说效果不好。 为此,请使用
(prin1 list-foo)
或(prin1-to-string)将其embedded到(消息)中。
最简单的debugging方法可能是交互式地运行你的代码。 你可以通过在你的expression式后面运行Cx Ce ( eval-last-sexp
)来eval-last-sexp
缓冲区中做到这一点。
或者:
(message "hello world")
查看有关内置消息function的更多信息。 如果生成大量消息,则可能需要将variablesmessage-log-max
自定义为更大的值。
要一一解答你的问题:
- 打印一下:有一百万种方法。 (消息“Hello”)将string放在echo区域中; (插入“hello”)将string放入当前缓冲区中…
- 我怎样才能检查是否运行下面的代码:我只是用(说)“frotzumotzulous”(即任何string,只要它没有命名一个真实的文件)replace“auctex.el”,然后看看你是否收到错误消息。 如果你没有错误,那么显然这个代码没有运行。