我想查看emacs会话期间所有emacs lisp函数调用的日志。
我想知道解释器究竟在做什么。如果有意义的话,如何“拦截”翻译的REPL?
使用strace,我可以附加到emacs进程并查看所有系统调用。但我需要有关哪些lisp函数实际负责的更高级别的信息。
顺便说一句,这样做的动机是在我的emacs会话中调试一个问题,其中emacs进程一直在监听一个永远不可用的套接字:
recvfrom(4, 0xbd4754, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
# netstat -p |grep 14854
unix 3 [ ] STREAM CONNECTED 14854 3040/emacs
答案 0 :(得分:4)
您可以尝试M-x profile-start RET RET ... M-x profile-report RET
。它不会给你一个完整的跟踪,但它会显示任何持续足够时间的函数的调用树。
答案 1 :(得分:1)
Elisp信息手册附带一个节点
18.2.12跟踪缓冲区
正如所提到的东西依赖于edebug,应该是一种从跟踪点到跟踪点并最终杀死的方法。
WRT to logging,可能已经使用来自trace.el的trace-function
完成了。
_
答案 2 :(得分:1)
我不知道跟踪所有函数调用的任何内容。这肯定需要在C中实现。也许你可以使用一些现有的调试编译选项?
以下对于更有针对性的调试仍然有用。 (然而,如果你试图让他们追踪所有的东西,Emacs肯定会停下来。)
两个图书馆的评论都有使用细节。
跟踪:
M-x find-library
RET trace
RET
;; M-x trace-function FUNCTION &optional BUFFER
;; M-x untrace-function FUNCTION
;; M-x untrace-all
Emacs Lisp Profiler(ELP):
M-x find-library
RET elp
RET
;; M-x elp-instrument-package
;; M-x elp-instrument-list
;; M-x elp-instrument-function
;; M-x elp-reset-*
;; M-x elp-results
;; M-x elp-restore-all