gpt4 book ai didi

debugging - 在 Emacs 和 SLIME 中调试 Common Lisp 的有效方法是什么?

转载 作者:行者123 更新时间:2023-12-02 08:00:35 25 4
gpt4 key购买 nike

我想知道使用 Emacs 和 SLIME 交互调试 Common Lisp 的有效方法有哪些。

我之前所做的:作为一个使用 IDE(VS 和 PyCharm)学习 C 和 Python 的人,我习惯于设置断点、添加监视和执行单步执行。但当我开始使用 CL 时,我发现调试工作流程根本不同。我没有找到设置断点、单步执行行并查看变量如何变化的好方法。

我使用的笨方法是在代码中添加“print”并一遍又一遍地运行代码,效率非常低。我知道我们可以“检查”SLIME 中的变量,但不知道如何以交互方式执行此操作。

我发现了什么:我在development of a Morse code translator上看到了这个视频。最近,展示了如何在SLIME中交互式调试的完整过程,非常有启发性和启发性。就好像我们可以与编译器“交谈”。

我想要的:我在网上进行了搜索,但发现了很少的教程,展示了经验丰富的 Lisper 实际上如何开发和调试他们的程序。我渴望学习这样的经验。

  • 如何交互式调试?
  • 有哪些好的做法和技巧?如何添加断点和步骤?
  • 您在调试时最常使用/认为最有用的快捷方式/工具/工作流程是什么?

最佳答案

您可以执行以下操作:

  • 您可以跟踪函数调用(请参阅 Common Lisp 中的 TRACEUNTRACEslime-toggle-trace-fdefinition*)。这有助于递归调用:您可以看到您传递的内容以及它们在每个级别返回的内容。
  • 标准内容:在某些地方添加 (format t ...) 。我想,无需评论。
  • 如果代码中断,您将进入调试器。从那里您可以检查堆栈,查看调用了什么以及传递了哪些参数。请参阅@jkiiski 链接:它有关于它的非常好的信息,包括 (break) 形式,它将充当断点并让您进入调试器。 剧透警告:您可以更改检查器中的值,您可以更改并重新编译代码并从(几乎)堆栈中的任何位置重新启动。
  • 最后但并非最不重要的一点:要调试宏,您需要 slime-macroexpand-1(MACROEXPAND-1 的包装器),甚至更好的 C-c M-e 用于宏步进器。

最后一个建议:如果您要进行认真的调试,请在文件中包含 (declaim (optimize (debug 3))) ,否则某些 CL 实现倾向于优化掉调用在堆栈上或使参数不可访问。

关于debugging - 在 Emacs 和 SLIME 中调试 Common Lisp 的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37754935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com