Emacs:是否有调试模式可以检查变量值的更改位置?

问题描述 投票:0回答:3

是否有调试模式可以检查 Emacs 中变量值的位置(哪个文件中的哪一行)发生了更改?

emacs elisp
3个回答
1
投票

我很确定你运气不好。 然而,并非一切都已丢失。

全局变量

通过 Common Lisp,你可以使用

define-symbol-macro
, 但 Emacs Lisp 没有。

你需要评估

(defun my-func-name ()
  my-var-name)

(defsetf my-func-name (val)
  (warn "my-var-name=%s" val) ; or `error'
  (setq my-var-name val))

然后你必须在搜索框中搜索并替换

my-var-name
(my-func-name)
源,还将
(setq my-var-name ...)
替换为
(setf
(my-func-name) ...)
并重新编译并重新加载源。

局部变量

let
替换为
symbol-macrolet


0
投票

在 Emacs 26.1 中执行

M-x debug-watch <variable> RET

https://emacs.stackexchange.com/questions/27962/tracking-down-a-write-to-a-variable


0
投票

https://www.gnu.org/software/emacs/manual/html_node/elisp/Variable-Debugging.html

命令:调试变量更改变量¶

此函数安排调试器在任何时候被调用 变量被修改。

It is implemented using the watchpoint mechanism, so it inherits the same characteristics and limitations: all aliases of variable will

一起观看,只能观看动态变量,并且 不会检测到对变量引用的对象的更改。为了 详细信息,请参阅变量更改时运行函数..

© www.soinside.com 2019 - 2024. All rights reserved.