代码之家  ›  专栏  ›  技术社区  ›  none

如何找出哪个函数调用正在损坏我的数据?

  •  0
  • none  · 技术社区  · 14 年前

    在Delphi7中,声明了一个类并从中创建了一个类(在UML意义上)。

    类包含StringList的公共字段类型。

    将对象传递几次后,第一行中的第一个字母将被修剪掉。

    我如何从没有发生的情况中追踪它????

    调用trims的函数是

    stringlist.ValueFromIndex[i];
    

    更多信息?

    是这样的。

    type 
      TObjectionFilterFields = class(TObject)
      private
        public
          z,x,c,v,b,n,a,s:integer;
          list1:TStringList;
          list2:TStringList;
          enum:TEnum;
          constructor Create; //override;
          destructor Destroy; //override;
      end;
    

    现在,在一个对象中,我们调用create、insert和pass。 在另一个对象上,我们获取数据并用+concatation创建一个字符串。

    for i := 0 to list1.count-1
     sql.add(''''+list1.ValueFromIndex[i] + ''''+'hdsjkf');
    

    嫉妒StringList.Strings[i]解决了它

    谢谢

    1 回复  |  直到 14 年前
        1
  •  1
  •   Toon Krijthe    14 年前

    据我所知。您有一个对象,其中包含类型为tstringlist的公共字段。

    type
      TMyClass = class
        FField : TStringList;
      end;
    

    您已经创建了一个实例并将其传递给了一个函数。

    var
      instance : TMyClass;
    
    begin
      instance := TMyClass.Create;
      try
        DoSomething(instance);
      finally
        instance.Free;
      end;
    end;
    
    
    procedure DoSomething(AObject: TMyClass);
    begin
      // Check here
      DoSomethingElse(AObject);
      // Check here
    end;
    
    procedure DoSomethingElse(AObject: TMyClass);
    begin
      // Check here
    end;
    

    您可以在每个函数的每个入口点和出口点检查对象的状态,以便找出发生更改的时间。如果你自己找不到问题,就发布代码。

    请注意,使用公共字段可能很危险,因为任何东西都可以访问和更改该字段。