我是 Emacs 的忠实粉丝,并且经常使用它,尤其是在编程和调试(使用 gud)(C/C++)时。
最近我必须调试一个程序(相当简单,但需要计算大量数据(图论)),但我遇到了一个相当烦人的问题。
在程序逐步执行过程中,出现以下错误:
error in process filter: Stack overflow in regexp matcher
我做了一些研究来找出它是什么,然后我发现了这篇文章:在 emacs 中调试(使用 gud)经常会导致堆栈溢出错误 https://stackoverflow.com/questions/2882488/debugging-in-emacs-with-gud-often-results-in-stack-overflow-error.
据我了解,正则表达式匹配器存在问题,而且我的程序中的某些内容太长了? (我确实有非常长的函数名称和很多参数,而且我还使用了非常大的容器。)
我真的很想解决这个问题,但我对调试 Emacs Lisp 一无所知,有人可以帮助我吗?
这是我从 Emacs 内部调试器获得的输出:http://pastebin.com/5CKe74e6 http://pastebin.com/5CKe74e6
我还应该指出,我使用 Emacs Prelude 的个性化版本。
根本问题是正则表达式 (regexp) 包含太多替代项,当应用于(通常很长)文本时,它无法匹配它尝试匹配的任何内容。
在你的情况下,它是正则表达式:
"\\([[:alnum:]-_]+\\)=\\({\\|\\[\\|\"\"\\|\"\\(?:[^\\\"]\\|\\\\.\\)*\"\\)"
函数使用哪个gdb-jsonify-buffer
.
看起来这个正则表达式试图匹配分配。基本上,它匹配一个变量左侧=
和右侧表达式(的一部分)。正则表达式似乎匹配的内容之一是包含转义引号的字符串——这始终是一个警告信号,因为 Emacs 提供了更好的解析字符串的方法。
问题可能源于以下事实:此正则表达式是错误的(因此它匹配的字符串比您的字符串多得多)、您的字符串格式不正确,或者您的程序仅包含一个非常大的字符串。
我建议您向该包的维护者提交错误报告。确保包含导致触发错误的文本。
或者,您可以尝试自己修复此问题。我建议您将复杂的正则表达式替换为更简单的正则表达式,以查找字符串的开头。然后您可以使用,例如,(forward-sexp)
找到字符串的结尾。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)