Emacs 错误的类型参数:number-or-marker-p

Emacs 错误的类型参数:number-or-marker-p,emacs,Emacs,Emacs在抱怨什么。这个错误偶尔会发生在我身上,但我对Emacs的世界还不熟悉,对C也不是很在行。现在,Emacs阻止了我,甚至不让我打开括号继续编码?这个错误意味着什么 编辑: 我的Emacs版本: 我的调试器信息: Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p (1953 . 3706)) c-looking-at-inexpr-block((1953 . 3706) (1953 . 37

Emacs在抱怨什么。这个错误偶尔会发生在我身上,但我对Emacs的世界还不熟悉,对C也不是很在行。现在,Emacs阻止了我,甚至不让我打开括号继续编码?这个错误意味着什么

编辑: 我的Emacs版本:

我的调试器信息:

Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p (1953 . 3706))
  c-looking-at-inexpr-block((1953 . 3706) (1953 . 3706))
  c-inside-bracelist-p(3742 ((1953 . 3706) (1953 . 3706) 3742 (1953 . 3706) 3742 (1953 . 3706) 3742 (1953 . 3706) 9156 (9046 . 9137) 3742 (1953 . 3706) 9156 (9046 . 9137) 3742 (1953 . 3706) 9156 (9046 . 9137) 3742 (1953 . 3706) 9156 (9046 . 9137) 3742 (1953 . 3706) 9156 (9046 . 9137) 3742 (1953 . 3706) 3742 (1953 . 3706) 3742 (1953 . 3706) 3742 (1953 . 3706) 3742 (1953 . 3706) 3742 (1953 . 3706) 3742 (1953 . 3706) 3742 (1953 . 3706) 3742 (1953 . 3706) 3742 (1953 . 3706) 3742 (1953 . 3706) 3742 (1953 . 3706) ...))
  c-guess-basic-syntax()
  c-indent-line()
  indent-according-to-mode()
  c-electric-continued-statement()
  abbrev-insert(while #("while" 0 5 (fontified t face font-lock-keyword-face)) 9785 9790)
  #[0 "\304 \211@A\211@A\211@A\211@A\n\211\205Q\305`\306\"\305\306\"\2042\307\310 !\2042\311 \210\312   $V\203O`U\203Ob\210\266\202\266\204\207" [noninteractive last-abbrev-text last-abbrev last-abbrev-location abbrev--before-point copy-marker t window-minibuffer-p selected-window undo-boundary abbrev-insert] 20 "\n\n(fn)"]()
  apply(#[0 "\304 \211@A\211@A\211@A\211@A\n\211\205Q\305`\306\"\305\306\"\2042\307\310 !\2042\311 \210\312 $V\203O`U\203Ob\210\266\202\266\204\207" [noninteractive last-abbrev-text last-abbrev last-abbrev-location abbrev--before-point copy-marker t window-minibuffer-p selected-window undo-boundary abbrev-insert] 20 "\n\n(fn)"] nil)
  #[771 ":\2030@\301=\203\300@\302A\"\303#\207\304@\305\306\307\310\311\312\300!\313\"\314\315%A##\207\304\316\"\207" [(#0) t append nil apply apply-partially make-byte-code 642 "\300@#\207" vconcat vector [] 7 "\n\n(fn FUNS GLOBAL &rest ARGS)" #[0 "\304 \211@A\211@A\211@A\211@A\n\211\205Q\305`\306\"\305\306\"\2042\307\310 !\2042\311 \210\312    $V\203O`U\203Ob\210\266\202\266\204\207" [noninteractive last-abbrev-text last-abbrev last-abbrev-location abbrev--before-point copy-marker t window-minibuffer-p selected-window undo-boundary abbrev-insert] 20 "\n\n(fn)"]] 12 "\n\n(fn FUNS GLOBAL ARGS)"](nil nil nil)
  expand-abbrev()
  self-insert-command(1)
  c-electric-paren(nil)
  call-interactively(c-electric-paren nil nil)

您可以使用Lisp调试器更精确地找出正在发生的事情

  • 加载源(非字节编译)文件
    cc cmds.el
    (定义
    c-indent-line
    )和
    cc引擎.el
    (定义
    c-guess-basic-syntax
    c-inside-bracelist-p
    ,和
    c-looking-at-infer-block

    (使用
    M-x加载库cc cmds.el
    M-x加载库cc engine.el
    ——不要忘记
    .el

  • 在单独的框架(
    C-x 5 f
    )中打开这两个源文件,然后导航到您将使用调试器执行的函数。这样,您就可以更容易地查看调试器正在执行的操作的上下文

  • 然后
    M-x调试条目c-indent-line

    使用
    d
    单步执行调试器。您可以使用
    c
    跳过任何不想深入细节的步骤


  • 您可以从条目c-looking-at-infer-block上的
    M-x debug开始,但这可能无法为您提供足够的上下文来查看发生了什么。您也可以从自由地使用
    c
    而不是
    d
    开始,以快速确定要在哪里减速并查看详细信息。下面,多次运行调试器以引发错误,使用二进制搜索缩小您希望关注细节的位置(使用
    d
    )。

    您使用的是哪个版本的Emacs?(
    M-x emacs版本
    )。禁用
    abbrev模式时是否仍会发生这种情况?如果您能够可靠地触发错误,请查看是否可以使用
    emacs-Q
    复制它。虽然我不熟悉此代码,因此可能遗漏了一些内容,但在我看来,这可能是
    c-inside-bracelist-p
    中的错误,或者生成了无效的
    paren状态
    paren-state
    元素可以是cons单元格,虽然一些代码考虑了这一点,但调用
    c-looking-at-infer-block
    使用的参数仅为
    (car-paren-state)
    ,该参数可能不是整数,但随后会被当作整数使用(因此出现错误)。我不知道在
    paren state
    中连续有两个cons单元格是否有效,但正是这种情况导致了错误。我认为如果您还没有找到相关的错误报告,您可能应该
    M-x report emacs bug
    。如果您想修复此问题,第一步是设置一个可重复性最低的示例。给出一个Emacs版本、一个C测试文件和最小配置(
    Emacs-q
    preferred)。发布图像很少有帮助。Emacs版本24.3.1。我能够复制错误,事实上我无法让它消失。然而,我缩进了整个缓冲区,现在没有更多的错误。当它再次出现时,我将尝试emacs-Q。