Delphi(Delphi11) 编译(compiling)参数优化(optimization) 的N小时调试析

Delphi(Delphi11) 编译(compiling)参数优化(optimization) 的N小时调试析

看这诡异的题目,就透着怪诞。

环境:Delphi Win32 Exe
功能:JSONData,加密压缩存档后解压解密(这都木有问题),再转入内存表,写了一段垃圾代码

{ Jsonarray => memTable }
function JsonToDataSet(Ja:TJSONArray;var DataSet:TFDMemTable;var ErrMsg:String):Boolean; overload
var
  I,X: Integer;
  jKey, xKey:String;
  J : TJSONObject;  jEnum:TJSONObject.TEnumerator;
begin
    Result := False;
  Try
          if (Ja = nil) or (DataSet = nil) then Exit;

          //自动 创建 字段 DataSet 被清空
          if ja[0] = nil then Exit;
          if not JsonToDataSet(Ja[0] as TJSONObject,DataSet,ErrMsg) then Exit;

          // 内存表创建完毕!
          I := 1;{ for 不满足条件不会初始化 I:=1 }
          for I := 1 to Ja.Count - 1 do
          with DataSet do
          begin
              Append; // 增加行记录
              J := Ja[I] as TJSONObject;
              for X := 0 to J.Count - 1 do
              begin
                  // 枚举所有字段
                  JEnum := J.GetEnumerator;
                  while JEnum.MoveNext do
                  Begin
                    xKey := JEnum.Current.JsonString.Value;
                    FieldByName(XKey).AsString:= JEnum.Current.JsonValue.Value;
                  End;
              end;
              Post;   // 提交
          end;
ErrMsg:=Format( '%sDataSet.RecordCount=%d %s' , [#13#10#13#10,DataSet.RecordCount,#13#10#13#10 ] );
ErrMsg:= ErrMsg + Format( '%s Ja.Count = %d %s' , [#13#10#13#10,Ja.Count,#13#10#13#10  ] );
ErrMsg:= ErrMsg + Format( '%s I = %d %s' , [#13#10#13#10, I ,#13#10#13#10  ] );
raise Exception.Create(ErrMsg);

          Result := (DataSet.RecordCount = I );
  Except
    On E : Exception Do errMsg := E.Message;
  End;
end;

这里算法逻辑是:
传入的Ja数组,Ja[0]有效,初始化内存表。
利用For循环添加剩余记录,那么

问题

来了!!!!!!!!!!!!!!

Delphi11,默认

compiling.optimization = false, 我是开启优化处理的。

在这里插入图片描述
这是调试,看输出:

DEBUG模式

在这里插入图片描述
调试 Raise 实际是成功的。
再看:

RELEASE模式

在这里插入图片描述

取消

编译(compiling)参数优化(optimization)

跟开发调试过程一样一样的。

优化:

**I := 1;{ for 不满足条件不会初始化 I:=1 }
          for I := 1 to Ja.Count - 1 do**

就是,就是,就是… …

在这里插入图片描述
在这里插入图片描述

高手指点。

总结

不要为了少定义一个变量,少一行代码而花费几个小时找问题~~~~~~~~~~~~~~~~~~~~~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ti-蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值