我不知道为什么我在唠叨the documentation for the elisp debugger时遇到这么多麻烦。
我看到它有一个“步入”(d)的命令。但对于我的生活,我看不出步出或步伐。
有人可以帮忙吗?
如果我在 Backtrace 缓冲区中有这个:
Debugger entered--returning value: 5047
line-beginning-position()
* c-parse-state()
* byte-code("...")
* c-guess-basic-syntax()
c-show-syntactic-information(nil)
call-interactively(c-show-syntactic-information)
...我在哪里放光标,键入什么键,退出parse-state()fn?我的意思是,运行直到fn返回,然后再次在调试器中停止。
答案 0 :(得分:4)
调试时,按?,我看到了:
o edebug-step-out
f edebug-forward-sexp
h edebug-goto-here
我相信 o (它是step-out
)和 f (就像跳过一样)是你正在寻找的,虽然我也找到 h 非常有用。
答案 1 :(得分:2)
'c'和'j'的工作方式类似于步出和步进。当遇到标记的帧(由“*”表示)时(文档说“退出”但这似乎不是调试器的行为),将重新输入调试器。当顶部框架被标记时,它们像步进一样工作;如果不是,他们的工作就像走出去一样。
在您的示例回溯中,输入任意一个将从line-beginning-position
跳出c-parse-state
。帧标志应该清除,因此第二次键入应该从c-parse-state
开始。
答案 2 :(得分:1)
嗯。就我而言,我更喜欢debug
到edebug
,而是每个人都喜欢......
关于debug
,我使用d
,c
,e
和q
。
如果您确实使用debug
,请记住一件事,即节省时间和精力,当您看到一个宏调用(以#
开头)时,您可以点击{{ 1}}扩展宏 - 在挖掘宏扩展代码时通常没有任何意义(除非您编写宏并且您正在尝试调试它)。
特别是对于c
,要使用dolist
跳过两级宏展开:一个用于c
,另一个用于dolist
。
HTH。