gpt4 book ai didi

regex - 如何在Emacs中修复 "stack overflow in regexp matcher"

转载 作者:行者123 更新时间:2023-12-04 04:04:46 30 4
gpt4 key购买 nike

我是Emacs的忠实拥护者,经常使用它,尤其是在进行编程和调试(使用Gud)(C/C++)时。

最近,我不得不调试一个程序(相当简单,但是要对大量数据进行计算(图论)),但是我遇到了一个很烦人的问题。
在程序的逐步执行过程中,出现以下错误:

error in process filter: Stack overflow in regexp matcher

我进行了一些研究以了解它是什么,然后发现了这篇文章: Debugging in emacs (with gud) often results in stack overflow error

因此,据我所知,正则表达式匹配器存在问题,并且程序中的某些内容太长了吗? (我的函数名确实很长,带有很多参数,而且我还使用了非常大的容器。)

我真的很想解决此问题,但是我对调试Emacs Lisp一无所知,有没有人可以帮助我?

这是我从Emacs内部调试器获得的输出: http://pastebin.com/5CKe74e6

我还应该指出,我使用的是Emacs Prelude的个性化版本。

最佳答案

潜在的问题是正则表达式(regexp)包含太多替代项,并且在应用于(通常为长)文本时,它无法匹配其尝试匹配的任何内容。

在您的情况下,它是正则表达式:

"\\([[:alnum:]-_]+\\)=\\({\\|\\[\\|\"\"\\|\"\\(?:[^\\\"]\\|\\\\.\\)*\"\\)"

gdb-jsonify-buffer函数使用。

看起来此正则表达式试图匹配分配。基本上,它将 =左侧的变量与右侧表达式的一部分匹配。正则表达式似乎匹配的东西之一是一个字符串,其中包含转义的引号-这始终是一个警告信号,因为Emacs提供了更好的解析字符串的方法。

问题可能源于以下事实:此正则表达式是错误的(因此它比字符串更匹配),字符串格式错误或程序仅包含一个很大的字符串。

我建议您向该软件包的维护者提交错误报告。确保包含引起错误触发的文本。

或者,您可以尝试自己修复此问题。我建议您用找到字符串开头的更简单的正则表达式替换复杂的正则表达式。然后,您可以使用 (forward-sexp)查找字符串的结尾。

关于regex - 如何在Emacs中修复 "stack overflow in regexp matcher",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31206568/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com