当我使用toggle-debug-on-error,并查看 Backtrace 缓冲区中生成的回溯时,有许多关键转义似乎不应该存在,例如:
Debugger entered--Lisp error: (invalid-read-syntax "#")
read(#<buffer emacs-config.org>)
eval-defun-2()
#[257 "\211\203
\303\304!\210\305?!\207 \204\306 \207\307\310!\311\211\306 \262\n\262)=\204+\207" [edebug-all-defs eval-expression-debug-on-error debug-on-error require edebug eval-defun eval-defun-2 make-symbol "t" nil] 6 2405975 "P"](nil)
ad-Advice-eval-defun(#[257 "\211\203
\303\304!\210\305?!\207 \204\306 \207\307\310!\311\211\306 \262\n\262)=\204+\207" [edebug-all-defs eval-expression-debug-on-error debug-on-error require edebug eval-defun eval-defun-2 make-symbol "t" nil] 6 2405975 "P"] nil)
这是什么,如何将其删除或将其转换为有用的东西?
答案 0 :(得分:1)
这是字节编译的代码。请参见elisp-manual“16.2字节编译功能”一节。
实际问题是您尝试读取eval文件(可能是每load-file
)。这不起作用。
您可以在org-mode中对缓冲区执行的操作是org-babel-execute-buffer
。
该功能的文档是:
org-babel-execute-buffer is an interactive autoloaded compiled Lisp
function in `ob-core.el'.
It is bound to C-c C-v b, C-c C-v C-b.
(org-babel-execute-buffer &optional ARG)
Execute source code blocks in a buffer.
Call `org-babel-execute-src-block' on every source block in
the current buffer.
答案 1 :(得分:0)
以下是一些已编译代码的示例 -
(defun foo (x) "Double a number" (+ x x))
(byte-compile 'foo) =>
#[(x) "\211\\\207" [x] 2 "Double a number"]
ie
#[
(x) ; arguments
"\211\\\207" ; byte-code
[x] ; constants
2 ; stacksize
"Double a number" ; docstring
]
此代码可以反汇编 -
(disassemble (byte-compile 'foo)) =>
byte code:
doc: double a number
args: (x)
0 varref x
1 dup
2 plus
3 return
有关这些编译对象的简要说明,请参阅此页面:Byte-Code Objects
如Drew所提到的那样,在堆栈跟踪中具有更易读的编译函数形式会很好。也许有人在某处做了一些建议。