如何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-errorMx toggle-debug-on-errorinputdebugging器。

  • Mx toggle-debug-on-quit – 当用户点击Cg时inputdebugging器。
  • 将显式调用置于代码中特定位置(断点)的debugfunction,以在这些位置inputdebugging器:
     (debugging)

您使用dc跳过debugging器,跳过特定评估的详细信息。

这对打印值很有用

 (message "Hello (%s)" foo) 

但对于数据结构来说效果不好。 为此,请使用

 (prin1 list-foo) 

或(prin1-to-string)将其embedded到(消息)中。

最简单的debugging方法可能是交互式地运行你的代码。 你可以通过在你的expression式后面运行Cx Ceeval-last-sexp )来eval-last-sexp缓冲区中做到这一点。

或者:

 (message "hello world") 

查看有关内置消息function的更多信息。 如果生成大量消息,则可能需要将variablesmessage-log-max自定义为更大的值。

要一一解答你的问题:

  • 打印一下:有一百万种方法。 (消息“Hello”)将string放在echo区域中; (插入“hello”)将string放入当前缓冲区中…
  • 我怎样才能检查是否运行下面的代码:我只是用(说)“frotzumotzulous”(即任何string,只要它没有命名一个真实的文件)replace“auctex.el”,然后看看你是否收到错误消息。 如果你没有错误,那么显然这个代码没有运行。