Questions tagged «error-handling»

3
如何妥善处理init文件中的错误
我想要一种在运行初始化文件时捕获错误,然后优雅地处理它们的方法。我的许多最重要的自定义项和键绑定都显示在初始化文件的末尾,以确保其他设置不会套用在它们之上。问题是,当初始化中止得很早时,在没有应用我熟悉的键绑定和设置的情况下尝试调试问题会感到完全瘫痪。 发生错误时,是否有任何方法可以正常完成初始化过程?

3
错误显示行号
假设emacs引发了一些我不理解的错误。也许错误提示“符号的变量值无效:模式”,但是modes代码中出现了很多符号,因此我需要一些上下文。可以将Emacs配置为提及lisp代码的行号,以便我知道是什么代码导致了错误吗? 我尝试这样做(setq stack-trace-on-error '(buffer-read-only))并运行了永久代码,以获取堆栈跟踪。也没有堆栈跟踪。 我也尝试过调用edebug-defun我的函数并逐步执行它。直到我退出该函数后,才会引发错误。 (对于开发elisp的一般调试技能,我对当前遇到的特定错误的原因确实不那么感兴趣。请提供有关如何从行号,sexp或堆栈跟踪中获取信息的建议)错误。)

1
以编程方式从错误中获取回溯
如果在Emacs Lisp代码中以表示错误,并且debug-on-error为t,则我将获得一个回溯缓冲区,可以很容易地找出发生错误的位置。但是,对于异步处理来自网络的响应时发生的错误,弹出回溯缓冲区会很烦人,所以我宁愿捕获错误condition-case并记录下来。 因此,当我处理中的错误时condition-case,是否有办法在错误发生时访问回溯?调用该backtrace函数将获取处理程序内部代码的回溯,这不是我想要的。 (condition-case e (do-something-that-might-fail) (error (message "%s" ;; This gets the wrong backtrace! (with-temp-buffer (let ((standard-output (current-buffer))) (backtrace) (buffer-string))))))

2
重新抛出Emacs Lisp中的错误
我需要调用一个函数并仅在该函数失败时执行清理,然后重新启动该错误。这是伪代码: (condition-case err (call-function) (error (cleanup) ;; how do I raise `err`? ))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.