You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 2006迁移至Delphi 11:Range Check Error定位求助

Delphi 11迁移时Range Check Error的定位与修复

快速定位错误行的实用方法

  • 启用调试器的范围检查中断:在Delphi 11的项目选项中,确认「范围检查(Range Checking)」已开启(旧项目迁移后可能默认关闭,手动去「编译器选项」里找)。运行程序触发错误时,调试器会直接停在引发错误的代码行,一步到位。
  • 添加ERangeError异常断点:打开IDE的「断点」面板,新增一个异常断点,指定异常类型为ERangeError。之后程序一触发范围检查错误就会自动中断在出错位置,精准定位问题代码。
  • 临时加日志排查:如果某些场景无法用调试器覆盖,就在可疑的字符串、数组操作代码前后,输出关键变量值(比如你代码里的pos和Length(input))到日志,快速找出越界的情况。

字符串操作引发错误的常见修复

你给出的代码示例就是典型的字符串索引越界:

function TForm1.test(input: string; pos: integer): string;
begin
  abcd('Input Char > ' + input[pos]);
...

这里pos的值超出了input字符串的有效索引范围(Delphi字符串索引从1开始,最大到Length(input))。修复可以这么做:

  • 加边界判断:访问字符串前先校验pos的合法性:
    if (pos >= 1) and (pos <= Length(input)) then
      abcd('Input Char > ' + input[pos])
    else
      abcd('无效位置:' + IntToStr(pos));
    
  • 局部关闭范围检查(谨慎使用):如果旧代码确实依赖无范围检查的行为,可以在函数开头加{$R-}指令临时关闭范围检查,函数结尾用{$R+}恢复。但这会隐藏潜在的越界风险,只建议在确认安全的代码段使用。

内容的提问来源于stack exchange,提问作者user14668421

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:42:34