【问题标题】:RegexKitLite assertion failure occurring intermittentlyRegexKitLite 断言失败间歇性发生
【发布时间】:2010-11-19 13:24:08
【问题描述】:

我正在使用基于 Mac OS X 和 iPhone OS 附带的 ICU 库构建的精彩 RegexKitLite 框架。到目前为止一直一帆风顺,除了在搜索匹配项时间歇性出现的这个错误:

Internal Error
Invalid parameter not satisfying:
(cacheSlot->setToHash == buffer->hash) && (cacheSlot->setToLength == buffer->length) && (cacheSlot->setToUniChar == buffer->uniChar)

知道是什么原因造成的吗?

【问题讨论】:

  • 您使用的字符串类型有什么特别之处吗?您是否有可能尝试在多个线程中执行相同的操作?
  • 这听起来像是 RegexKitLite 问题,与每个 regex 无关。在专门介绍 RegexKitLite 的网站上,您可能会遇到更好的运气。

标签: objective-c regex assertions intermittent regexkitlite


【解决方案1】:

注意:我是 RegexKitLite 的作者。

这是 RegexKitLite 中的内部断言失败。有很多内置的内部断言检查。这是说从缓存中检索缓存的已编译正则表达式后,由于某种原因,检索到的缓存正则表达式没有完全按照应有的方式设置。

您能做的最好的事情是在sourceforge.net RegexKit bug tracker 提交错误报告。如果可能的话,提交一个重现错误的测试用例。这是一个总的、疯狂的、出乎意料的猜测,但根据断言消息,我敢打赌它与您使用 range: 参数的匹配操作有关,并且该范围一直是'移动”和缩小。该范围可能跨越小/大缓冲区大小,大约 2048 个字符。另一种可能性是搜索包含 Unicode 字符的字符串,RegexKitLite 正在使用字符串直接缓冲区,可能在可变字符串上,并且后备缓冲区已经重新分配,因为它增长或缩小......或者,一个“非 Unicode”的可变字符串已发生变异,现在包含 Unicode 字符,并且它已从缓存的 UTF-16 转换切换到字符串直接缓冲区。

希望这将帮助您缩小触发断言失败的极端情况。嘿,至少它是在检测问题,而不是一味地进行分段故障或返回虚假结果字符串。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-18
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多