elisp 调试,函数失败时显示回溯
elisp debugging, show backtrace when function fails
我想在我 运行 这段代码时看到错误的回溯。
(make-network-process :name (dbgp-make-listner-name 10004)
:server 1
:service 10004
:family 'ipv4
:nowait t
:noquery t
:filter 'dbgp-comint-setup
:sentinel 'dbgp-listener-sentinel
:log 'dbgp-listener-log)
https://github.com/gregsexton/ob-ipython/issues/4
这说明我可以看到make-network-process
下面发生了什么。
Debugger entered--Lisp error: (file-error "make client process failed" "connection refused" :name "localhost" :buffer # :host "localhost" :service 9988 :nowait nil)
make-network-process(:name "localhost" :buffer # :host "localhost" :service 9988 :nowait nil)
open-network-stream("localhost" # "localhost" 9988 :type plain :nowait nil)
byte-code . . .
url-open-stream("localhost" # "localhost" 9988)
url-http-find-free-connection("localhost" 9988)
url-http([cl-struct-url "http" nil nil "localhost" 9988 "/execute/default" nil nil t nil t] #128 "234p#005001p07" [(nil) (nil) url-debug retrieval "Synchronous fetching done (%S)" t] 5 "\n\n(fn &rest IGNORED)")
url-retrieve-internal("http://localhost:9988/execute/default" #128 "234p#005001p07" [(nil) (nil) url-debug retrieval "Synchronous fetching done (%S)" t] 5 "\n\n(fn &rest IGNORED)" nil nil)
url-retrieve("http://localhost:9988/execute/default" #[128
我试过了
toggle-debug-on-error
edebug-eval-defun
但是我看不到回溯..
在*Backtrace*
缓冲区上,我可以看到
Debugger entered: nil
(progn (debug) (make-network-process :name (dbgp-make-listner-name 10004) :server 1 :service 10004 :family (quote ipv4) :nowait t :noquery t :filter (quote dbgp-comint-setup) :sentinel (quote dbgp-listener-sentinel) :log (quote dbgp-listener-log)))
eval((progn (debug) (make-network-process :name (dbgp-make-listner-name 10004) :server 1 :service 10004 :family (quote ipv4) :nowait t :noquery t :filter (quote dbgp-comint-setup) :sentinel (quote dbgp-listener-sentinel) :log (quote dbgp-listener-log))) nil)
edebug-eval-defun(nil)
apply(edebug-eval-defun nil)
eval-defun(nil)
funcall-interactively(eval-defun nil)
call-interactively(eval-defun record nil)
command-execute(eval-defun record)
helm-M-x(nil "eval-defun")
funcall-interactively(helm-M-x nil "eval-defun")
call-interactively(helm-M-x nil nil)
command-execute(helm-M-x)
虽然第一个跟踪显示了后面发生的事情 make-network-process
,但我的跟踪并没有深入..
所以问题是如何在回溯中获得更多细节。
对于字节编译的 elisp 函数,加载相关库的 未编译 版本通常会为您提供更多详细信息,因为调试器随后可以向您显示 事情发生在函数中的确切位置。
然而在这个例子中,make-network-process
是一个 C 函数,所以你现在看到的就是你将从 elisp 调试器中得到的全部内容。
如果您想了解更多,您必须 examine/debug process.c 中的源代码。
我想在我 运行 这段代码时看到错误的回溯。
(make-network-process :name (dbgp-make-listner-name 10004)
:server 1
:service 10004
:family 'ipv4
:nowait t
:noquery t
:filter 'dbgp-comint-setup
:sentinel 'dbgp-listener-sentinel
:log 'dbgp-listener-log)
https://github.com/gregsexton/ob-ipython/issues/4
这说明我可以看到make-network-process
下面发生了什么。
Debugger entered--Lisp error: (file-error "make client process failed" "connection refused" :name "localhost" :buffer # :host "localhost" :service 9988 :nowait nil)
make-network-process(:name "localhost" :buffer # :host "localhost" :service 9988 :nowait nil)
open-network-stream("localhost" # "localhost" 9988 :type plain :nowait nil)
byte-code . . .
url-open-stream("localhost" # "localhost" 9988)
url-http-find-free-connection("localhost" 9988)
url-http([cl-struct-url "http" nil nil "localhost" 9988 "/execute/default" nil nil t nil t] #128 "234p#005001p07" [(nil) (nil) url-debug retrieval "Synchronous fetching done (%S)" t] 5 "\n\n(fn &rest IGNORED)")
url-retrieve-internal("http://localhost:9988/execute/default" #128 "234p#005001p07" [(nil) (nil) url-debug retrieval "Synchronous fetching done (%S)" t] 5 "\n\n(fn &rest IGNORED)" nil nil)
url-retrieve("http://localhost:9988/execute/default" #[128
我试过了
toggle-debug-on-error
edebug-eval-defun
但是我看不到回溯..
在*Backtrace*
缓冲区上,我可以看到
Debugger entered: nil
(progn (debug) (make-network-process :name (dbgp-make-listner-name 10004) :server 1 :service 10004 :family (quote ipv4) :nowait t :noquery t :filter (quote dbgp-comint-setup) :sentinel (quote dbgp-listener-sentinel) :log (quote dbgp-listener-log)))
eval((progn (debug) (make-network-process :name (dbgp-make-listner-name 10004) :server 1 :service 10004 :family (quote ipv4) :nowait t :noquery t :filter (quote dbgp-comint-setup) :sentinel (quote dbgp-listener-sentinel) :log (quote dbgp-listener-log))) nil)
edebug-eval-defun(nil)
apply(edebug-eval-defun nil)
eval-defun(nil)
funcall-interactively(eval-defun nil)
call-interactively(eval-defun record nil)
command-execute(eval-defun record)
helm-M-x(nil "eval-defun")
funcall-interactively(helm-M-x nil "eval-defun")
call-interactively(helm-M-x nil nil)
command-execute(helm-M-x)
虽然第一个跟踪显示了后面发生的事情 make-network-process
,但我的跟踪并没有深入..
所以问题是如何在回溯中获得更多细节。
对于字节编译的 elisp 函数,加载相关库的 未编译 版本通常会为您提供更多详细信息,因为调试器随后可以向您显示 事情发生在函数中的确切位置。
然而在这个例子中,make-network-process
是一个 C 函数,所以你现在看到的就是你将从 elisp 调试器中得到的全部内容。
如果您想了解更多,您必须 examine/debug process.c 中的源代码。