mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 09:29:27 +02:00
FPDebug: tests
git-svn-id: trunk@43991 -
This commit is contained in:
parent
da6195622e
commit
1479bea78a
@ -436,6 +436,7 @@ var
|
||||
s1, s2, s3, s4, stest: String;
|
||||
ValueSize: QWord;
|
||||
Value: qword;
|
||||
SValue: int64;
|
||||
p2: Pointer;
|
||||
addednode: TTreeNode;
|
||||
begin
|
||||
@ -533,10 +534,10 @@ var
|
||||
Format('XX_X_CurInfo992X.Add(%s, %s, [%s]);%s', [s1, s2, stest, LineEnding]);
|
||||
end;
|
||||
DW_FORM_sdata : begin
|
||||
Value := SLEB128toOrdinal(p);
|
||||
s3 := IntToStr(Value);
|
||||
SValue := SLEB128toOrdinal(p);
|
||||
s3 := IntToStr(SValue);
|
||||
PascalTestCAseCode := PascalTestCAseCode +
|
||||
Format('XX_X_CurInfo992X.AddSLEB(%s, %s, %u);%s', [s1, s2, Value, LineEnding]);
|
||||
Format('XX_X_CurInfo992X.AddSLEB(%s, %s, %d);%s', [s1, s2, SValue, LineEnding]);
|
||||
end;
|
||||
DW_FORM_udata : begin
|
||||
Value := ULEB128toOrdinal(p);
|
||||
|
315
components/fpdebug/test/testdata/dwarfsetupbasic.lpr
vendored
315
components/fpdebug/test/testdata/dwarfsetupbasic.lpr
vendored
@ -7,8 +7,33 @@ program DwarfSetupBasic;
|
||||
{$OPTIMIZATION OFF}
|
||||
{$A1}
|
||||
|
||||
// TODO: add integer, cardinal, ...
|
||||
// Basic types
|
||||
// Records are for cast incompatiblity tests (they have no ordinal value)
|
||||
type
|
||||
PByte = ^Byte;
|
||||
PWord = ^Word;
|
||||
PLongWord = ^LongWord;
|
||||
PQWord = ^QWord;
|
||||
|
||||
PShortInt = ^ShortInt;
|
||||
PSmallInt = ^SmallInt;
|
||||
PInteger = ^Integer;
|
||||
PInt64 = ^Int64;
|
||||
|
||||
TSub1 = 1..9;
|
||||
TSub2 = 1000..90000;
|
||||
TSub3 = byte(10)..byte(250);
|
||||
TSub4 = -1..9;
|
||||
TSub5 = -11..-2;
|
||||
|
||||
PSub1 = ^TSub1;
|
||||
PSub2 = ^TSub2;
|
||||
PSub3 = ^TSub3;
|
||||
PSub4 = ^TSub4;
|
||||
PSub5 = ^TSub5;
|
||||
|
||||
PBoolean = ^Boolean;
|
||||
|
||||
TEnum0 = (e0a);
|
||||
TEnum1 = (e1a, e1b, e1c);
|
||||
TEnum2 = (e2a, e2b, e2c, e2d, e2e, e2f, e2g, e2h, e2i);
|
||||
@ -18,6 +43,13 @@ type
|
||||
TEnumX = (eXa, eXc := 3, eXb := 10);
|
||||
TEnumR3 = e3c..e3l;
|
||||
|
||||
PEnum0 = ^TEnum0;
|
||||
PEnum1 = ^TEnum1;
|
||||
PEnum2 = ^TEnum2;
|
||||
PEnum3 = ^TEnum3;
|
||||
PEnumX = ^TEnumX;
|
||||
PEnumR3 = ^TEnumR3;
|
||||
|
||||
TSet0 = Set of TEnum0;
|
||||
TSet1 = Set of TEnum1;
|
||||
TSet2 = Set of TEnum2;
|
||||
@ -28,14 +60,93 @@ type
|
||||
TSetC1 = Set of char;
|
||||
TSetR3 = Set of TEnumR3;
|
||||
|
||||
TSetP0 = packed Set of TEnum0;
|
||||
TSetP1 = packed Set of TEnum1;
|
||||
TSetP2 = packed Set of TEnum2;
|
||||
TSetP3 = packed Set of TEnum3;
|
||||
TSetPX1 = packed Set of (sp1a, sp1b, sp1c);
|
||||
TSetPB1 = packed Set of Byte;
|
||||
TSetPB2 = packed Set of 5..80;
|
||||
TSetPC1 = packed Set of char;
|
||||
TSetPR3 = packed Set of TEnumR3;
|
||||
|
||||
PSet0 = ^TSet0;
|
||||
PSet1 = ^TSet1;
|
||||
PSet2 = ^TSet2;
|
||||
PSet3 = ^TSet3;
|
||||
PSetX1 = ^TSetX1;
|
||||
PSetB1 = ^TSetB1;
|
||||
PSetB2 = ^TSetB2;
|
||||
PSetC1 = ^TSetC1;
|
||||
PSetR3 = ^TSetR3;
|
||||
|
||||
PSetP0 = ^TSetP0;
|
||||
PSetP1 = ^TSetP1;
|
||||
PSetP2 = ^TSetP2;
|
||||
PSetP3 = ^TSetP3;
|
||||
PSetPX1 = ^TSetPX1;
|
||||
PSetPB1 = ^TSetPB1;
|
||||
PSetPB2 = ^TSetPB2;
|
||||
PSetPC1 = ^TSetPC1;
|
||||
PSetPR3 = ^TSetPR3;
|
||||
|
||||
|
||||
|
||||
var // Globals
|
||||
VarByte: Byte;
|
||||
VarWord: Word;
|
||||
VarLong: LongWord;
|
||||
VarQWord: QWord;
|
||||
|
||||
VarInt8: ShortInt;
|
||||
VarInt16: SmallInt;
|
||||
VarInt32: Integer;
|
||||
VarInt64: Int64;
|
||||
|
||||
VarSub1: TSub1;
|
||||
VarSub2: TSub2;
|
||||
VarSub3: TSub3;
|
||||
VarSub4: TSub4;
|
||||
VarSub5: TSub5;
|
||||
|
||||
VarPByte: PByte;
|
||||
VarPWord: PWord;
|
||||
VarPLong: PLongWord;
|
||||
VarPQWord: PQWord;
|
||||
|
||||
VarPInt8: PShortInt;
|
||||
VarPInt16: PSmallInt;
|
||||
VarPInt32: PInteger;
|
||||
VarPInt64: PInt64;
|
||||
|
||||
VarPSub1: PSub1;
|
||||
VarPSub2: PSub2;
|
||||
VarPSub3: PSub3;
|
||||
VarPSub4: PSub4;
|
||||
VarPSub5: PSub5;
|
||||
|
||||
|
||||
|
||||
VarBoolean: Boolean;
|
||||
VarPBoolean: PBoolean;
|
||||
|
||||
|
||||
VarEnum0: TEnum0;
|
||||
VarEnum1: TEnum1;
|
||||
VarEnum2: TEnum2;
|
||||
VarEnum3: TEnum3;
|
||||
VarEnum4: (e4a,e4b,e4c,e4d);
|
||||
VarEnumX: TEnumX;
|
||||
VarEnumR3: TEnumR3;
|
||||
|
||||
VarPEnum0: PEnum0;
|
||||
VarPEnum1: PEnum1;
|
||||
VarPEnum2: PEnum2;
|
||||
VarPEnum3: PEnum3;
|
||||
VarPEnumX: PEnumX;
|
||||
VarPEnumR3: PEnumR3;
|
||||
|
||||
|
||||
VarSet0: TSet0;
|
||||
VarSet1: TSet1;
|
||||
VarSet2: TSet2;
|
||||
@ -48,17 +159,198 @@ var // Globals
|
||||
VarSetC2: set of char;
|
||||
VarSetR3: TSetR3;
|
||||
|
||||
VarByte: Byte;
|
||||
VarWord: word;
|
||||
VarLong: cardinal;
|
||||
VarPSet0: PSet0;
|
||||
VarPSet1: PSet1;
|
||||
VarPSet2: PSet2;
|
||||
VarPSet3: PSet3;
|
||||
VarPSetX1: PSetX1;
|
||||
VarPSetB1: PSetB1;
|
||||
VarPSetB2: PSetB2;
|
||||
VarPSetC1: PSetC1;
|
||||
VarPSetR3: PSetR3;
|
||||
|
||||
VarPSetP0: PSetP0;
|
||||
VarPSetP1: PSetP1;
|
||||
VarPSetP2: PSetP2;
|
||||
VarPSetP3: PSetP3;
|
||||
VarPSetPX1: PSetPX1;
|
||||
VarPSetPB1: PSetPB1;
|
||||
VarPSetPB2: PSetPB2;
|
||||
VarPSetPC1: PSetPC1;
|
||||
VarPSetPR3: PSetPR3;
|
||||
|
||||
|
||||
/////////////////
|
||||
type
|
||||
TRecByte = packed record VarByte: Byte; end;
|
||||
TRecWord = packed record VarWord: Word; end;
|
||||
TRecLong = packed record VarLong: LongWord; end;
|
||||
TRecQWord = packed record VarQWord: QWord; end;
|
||||
|
||||
TRecInt8 = packed record VarInt8: ShortInt; end;
|
||||
TRecInt16 = packed record VarInt16: SmallInt; end;
|
||||
TRecInt32 = packed record VarInt32: Integer; end;
|
||||
TRecInt64 = packed record VarInt64: Int64; end;
|
||||
|
||||
TRecSub1 = packed record VarSub1: TSub1; end;
|
||||
TRecSub2 = packed record VarSub2: TSub2; end;
|
||||
TRecSub3 = packed record VarSub3: TSub3; end;
|
||||
TRecSub4 = packed record VarSub4: TSub4; end;
|
||||
TRecSub5 = packed record VarSub5: TSub5; end;
|
||||
|
||||
TRecPByte = packed record VarPByte: PByte; end;
|
||||
TRecPWord = packed record VarPWord: PWord; end;
|
||||
TRecPLong = packed record VarPLong: PLongWord; end;
|
||||
TRecPQWord = packed record VarPQWord: PQWord; end;
|
||||
|
||||
TRecPInt8 = packed record VarPInt8: PShortInt; end;
|
||||
TRecPInt16 = packed record VarPInt16: PSmallInt; end;
|
||||
TRecPInt32 = packed record VarPInt32: PInteger; end;
|
||||
TRecPInt64 = packed record VarPInt64: PInt64; end;
|
||||
|
||||
TRecPSub1 = packed record VarPSub1: PSub1; end;
|
||||
TRecPSub2 = packed record VarPSub2: PSub2; end;
|
||||
TRecPSub3 = packed record VarPSub3: PSub3; end;
|
||||
TRecPSub4 = packed record VarPSub4: PSub4; end;
|
||||
TRecPSub5 = packed record VarPSub5: PSub5; end;
|
||||
|
||||
|
||||
TRecBoolean = packed record VarBoolean: Boolean; end;
|
||||
TRecPBoolean = packed record VarPBoolean: PBoolean; end;
|
||||
|
||||
|
||||
TRecEnum0 = packed record VarEnum0: TEnum0; end;
|
||||
TRecEnum1 = packed record VarEnum1: TEnum1; end;
|
||||
TRecEnum2 = packed record VarEnum2: TEnum2; end;
|
||||
TRecEnum3 = packed record VarEnum3: TEnum3; end;
|
||||
TRecEnumX = packed record VarEnumX: TEnumX; end;
|
||||
TRecEnumR3 = packed record VarEnumR3: TEnumR3; end;
|
||||
|
||||
TRecPEnum0 = packed record VarPEnum0: PEnum0; end;
|
||||
TRecPEnum1 = packed record VarPEnum1: PEnum1; end;
|
||||
TRecPEnum2 = packed record VarPEnum2: PEnum2; end;
|
||||
TRecPEnum3 = packed record VarPEnum3: PEnum3; end;
|
||||
TRecPEnumX = packed record VarPEnumX: PEnumX; end;
|
||||
TRecPEnumR3 = packed record VarPEnumR3: PEnumR3; end;
|
||||
|
||||
|
||||
TRecSet0 = packed record VarSet0: TSet0; end;
|
||||
TRecSet1 = packed record VarSet1: TSet1; end;
|
||||
TRecSet2 = packed record VarSet2: TSet2; end;
|
||||
TRecSet3 = packed record VarSet3: TSet3; end;
|
||||
TRecSetX1 = packed record VarSetX1: TSetX1; end;
|
||||
TRecSetX2 = packed record VarSetX2: set of (trsxa, trsxb, trsxc, trsxd); end;
|
||||
TRecSetB1 = packed record VarSetB1: TSetB1; end;
|
||||
TRecSetB2 = packed record VarSetB2: TSetB2; end;
|
||||
TRecSetC1 = packed record VarSetC1: TSetC1; end;
|
||||
TRecSetC2 = packed record VarSetC2: set of char; end;
|
||||
TRecSetR3 = packed record VarSetR3: TSetR3; end;
|
||||
|
||||
TRecPSet0 = packed record VarPSet0: PSet0; end;
|
||||
TRecPSet1 = packed record VarPSet1: PSet1; end;
|
||||
TRecPSet2 = packed record VarPSet2: PSet2; end;
|
||||
TRecPSet3 = packed record VarPSet3: PSet3; end;
|
||||
TRecPSetX1 = packed record VarPSetX1: PSetX1; end;
|
||||
TRecPSetB1 = packed record VarPSetB1: PSetB1; end;
|
||||
TRecPSetB2 = packed record VarPSetB2: PSetB2; end;
|
||||
TRecPSetC1 = packed record VarPSetC1: PSetC1; end;
|
||||
TRecPSetR3 = packed record VarPSetR3: PSetR3; end;
|
||||
|
||||
TRecPSetP0 = packed record VarPSetP0: PSetP0; end;
|
||||
TRecPSetP1 = packed record VarPSetP1: PSetP1; end;
|
||||
TRecPSetP2 = packed record VarPSetP2: PSetP2; end;
|
||||
TRecPSetP3 = packed record VarPSetP3: PSetP3; end;
|
||||
TRecPSetPX1 = packed record VarPSetPX1: PSetPX1; end;
|
||||
TRecPSetPB1 = packed record VarPSetPB1: PSetPB1; end;
|
||||
TRecPSetPB2 = packed record VarPSetPB2: PSetPB2; end;
|
||||
TRecPSetPC1 = packed record VarPSetPC1: PSetPC1; end;
|
||||
TRecPSetPR3 = packed record VarPSetPR3: PSetPR3; end;
|
||||
|
||||
var
|
||||
VarRecByte: packed record VarByte: Byte; end;
|
||||
VarRecWord: packed record VarWord: Word; end;
|
||||
VarRecLong: packed record VarLong: LongWord; end;
|
||||
VarRecQWord: packed record VarQWord: QWord; end;
|
||||
|
||||
VarRecInt8: packed record VarInt8: ShortInt; end;
|
||||
VarRecInt16: packed record VarInt16: SmallInt; end;
|
||||
VarRecInt32: packed record VarInt32: Integer; end;
|
||||
VarRecInt64: packed record VarInt64: Int64; end;
|
||||
|
||||
VarRecSub1: packed record VarSub1: TSub1; end;
|
||||
VarRecSub2: packed record VarSub2: TSub2; end;
|
||||
VarRecSub3: packed record VarSub3: TSub3; end;
|
||||
VarRecSub4: packed record VarSub4: TSub4; end;
|
||||
VarRecSub5: packed record VarSub5: TSub5; end;
|
||||
|
||||
VarRecPByte: packed record VarPByte: PByte; end;
|
||||
VarRecPWord: packed record VarPWord: PWord; end;
|
||||
VarRecPLong: packed record VarPLong: PLongWord; end;
|
||||
VarRecPQWord: packed record VarPQWord: PQWord; end;
|
||||
|
||||
VarRecPInt8: packed record VarPInt8: PShortInt; end;
|
||||
VarRecPInt16: packed record VarPInt16: PSmallInt; end;
|
||||
VarRecPInt32: packed record VarPInt32: PInteger; end;
|
||||
VarRecPInt64: packed record VarPInt64: PInt64; end;
|
||||
|
||||
VarRecPSub1: packed record VarPSub1: PSub1; end;
|
||||
VarRecPSub2: packed record VarPSub2: PSub2; end;
|
||||
VarRecPSub3: packed record VarPSub3: PSub3; end;
|
||||
VarRecPSub4: packed record VarPSub4: PSub4; end;
|
||||
VarRecPSub5: packed record VarPSub5: PSub5; end;
|
||||
|
||||
|
||||
VarRecBoolean: packed record VarBoolean: Boolean; end;
|
||||
VarRecPBoolean: packed record VarPBoolean: PBoolean; end;
|
||||
|
||||
|
||||
VarRecEnum0: packed record VarEnum0: TEnum0; end;
|
||||
VarRecEnum1: packed record VarEnum1: TEnum1; end;
|
||||
VarRecEnum2: packed record VarEnum2: TEnum2; end;
|
||||
VarRecEnum3: packed record VarEnum3: TEnum3; end;
|
||||
VarRecEnumX: packed record VarEnumX: TEnumX; end;
|
||||
VarRecEnumR3: packed record VarEnumR3: TEnumR3; end;
|
||||
|
||||
VarRecPEnum0: packed record VarPEnum0: PEnum0; end;
|
||||
VarRecPEnum1: packed record VarPEnum1: PEnum1; end;
|
||||
VarRecPEnum2: packed record VarPEnum2: PEnum2; end;
|
||||
VarRecPEnum3: packed record VarPEnum3: PEnum3; end;
|
||||
VarRecPEnumX: packed record VarPEnumX: PEnumX; end;
|
||||
VarRecPEnumR3: packed record VarPEnumR3: PEnumR3; end;
|
||||
|
||||
|
||||
VarRecSet0: packed record VarSet0: TSet0; end;
|
||||
VarRecSet1: packed record VarSet1: TSet1; end;
|
||||
VarRecSet2: packed record VarSet2: TSet2; end;
|
||||
VarRecSet3: packed record VarSet3: TSet3; end;
|
||||
VarRecSetX1: packed record VarSetX1: TSetX1; end;
|
||||
VarRecSetX2: packed record VarSetX2: set of (rsxa, rsxb, rsxc, rsxd); end;
|
||||
VarRecSetB1: packed record VarSetB1: TSetB1; end;
|
||||
VarRecSetB2: packed record VarSetB2: TSetB2; end;
|
||||
VarRecSetC1: packed record VarSetC1: TSetC1; end;
|
||||
VarRecSetC2: packed record VarSetC2: set of char; end;
|
||||
VarRecSetR3: packed record VarSetR3: TSetR3; end;
|
||||
|
||||
VarRecPSet0: packed record VarPSet0: PSet0; end;
|
||||
VarRecPSet1: packed record VarPSet1: PSet1; end;
|
||||
VarRecPSet2: packed record VarPSet2: PSet2; end;
|
||||
VarRecPSet3: packed record VarPSet3: PSet3; end;
|
||||
VarRecPSetX1: packed record VarPSetX1: PSetX1; end;
|
||||
VarRecPSetB1: packed record VarPSetB1: PSetB1; end;
|
||||
VarRecPSetB2: packed record VarPSetB2: PSetB2; end;
|
||||
VarRecPSetC1: packed record VarPSetC1: PSetC1; end;
|
||||
VarRecPSetR3: packed record VarPSetR3: PSetR3; end;
|
||||
|
||||
VarRecPSetP0: packed record VarPSetP0: PSetP0; end;
|
||||
VarRecPSetP1: packed record VarPSetP1: PSetP1; end;
|
||||
VarRecPSetP2: packed record VarPSetP2: PSetP2; end;
|
||||
VarRecPSetP3: packed record VarPSetP3: PSetP3; end;
|
||||
VarRecPSetPX1: packed record VarPSetPX1: PSetPX1; end;
|
||||
VarRecPSetPB1: packed record VarPSetPB1: PSetPB1; end;
|
||||
VarRecPSetPB2: packed record VarPSetPB2: PSetPB2; end;
|
||||
VarRecPSetPC1: packed record VarPSetPC1: PSetPC1; end;
|
||||
VarRecPSetPR3: packed record VarPSetPR3: PSetPR3; end;
|
||||
|
||||
VarRecEnum1: packed record Enum1: TEnum1; end;
|
||||
VarRecEnum2: packed record Enum2: TEnum2; end;
|
||||
VarRecSet1: packed record Set1: TSet1; end;
|
||||
VarRecSet2: packed record Set2: TSet2; end;
|
||||
VarRecSet3: packed record Set3: TSet3; end;
|
||||
VarRecSetB1: packed record SetB1: TSetB1; end;
|
||||
VarRecSetB2: packed record SetB2: TSetB2; end;
|
||||
|
||||
|
||||
begin
|
||||
@ -79,5 +371,4 @@ begin
|
||||
VarSetC1 := [];
|
||||
|
||||
VarByte := 0;
|
||||
VarRecEnum1.Enum1 := e1a;
|
||||
end.
|
||||
|
File diff suppressed because one or more lines are too long
@ -55,8 +55,10 @@ type
|
||||
procedure SetUp; override;
|
||||
procedure TearDown; override;
|
||||
published
|
||||
Procedure TestExpressionStructures;
|
||||
Procedure TestExpressionInt;
|
||||
Procedure TestExpressionBool;
|
||||
Procedure TestExpressionEnumAndSet;
|
||||
Procedure TestExpressionStructures;
|
||||
end;
|
||||
|
||||
implementation
|
||||
@ -102,8 +104,8 @@ begin
|
||||
case AExpKind of
|
||||
skInstance: ;
|
||||
skUnit: ;
|
||||
skRecord: ExpFlags(AVal, [svfMembers], [svfOrdinal, svfInteger, svfCardinal, svfDataAddress, svfDataSize]);
|
||||
skObject: ExpFlags(AVal, [svfMembers], [svfOrdinal, svfInteger, svfCardinal, svfDataAddress, svfDataSize]);
|
||||
skRecord: ExpFlags(AVal, [svfMembers], [svfOrdinal, svfInteger, svfCardinal, svfDataAddress, svfDataSize, svfIdentifier]);
|
||||
skObject: ExpFlags(AVal, [svfMembers], [svfOrdinal, svfInteger, svfCardinal, svfDataAddress, svfDataSize, svfIdentifier]);
|
||||
// skClass does NOT have svfSize (maybe svfSizeOfPointer ?);
|
||||
skClass: ExpFlags(AVal, [svfOrdinal, svfMembers, svfDataAddress, svfDataSize], [svfSize, svfInteger, svfCardinal]);
|
||||
skInterface: ;
|
||||
@ -111,10 +113,10 @@ begin
|
||||
skFunction: ;
|
||||
skArray: ;
|
||||
// skPointer: svfOrdinal, svfCardinal, svfDataAddress are all the same value
|
||||
skPointer: ExpFlags(AVal, [svfOrdinal, svfCardinal, svfDataAddress, svfSizeOfPointer], [svfMembers]);
|
||||
skInteger: ExpFlags(AVal, [svfOrdinal, svfInteger], [svfDataAddress, svfDataSize, svfMembers]);
|
||||
skCardinal: ExpFlags(AVal, [svfOrdinal, svfCardinal], [svfDataAddress, svfDataSize, svfMembers]);
|
||||
skBoolean: ;
|
||||
skPointer: ExpFlags(AVal, [svfOrdinal, svfCardinal, svfDataAddress, svfSizeOfPointer], [svfMembers, svfIdentifier]);
|
||||
skInteger: ExpFlags(AVal, [svfOrdinal, svfInteger], [svfDataAddress, svfDataSize, svfMembers, svfIdentifier]);
|
||||
skCardinal: ExpFlags(AVal, [svfOrdinal, svfCardinal], [svfDataAddress, svfDataSize, svfMembers, svfIdentifier]);
|
||||
skBoolean: ExpFlags(AVal, [svfOrdinal, svfBoolean], [svfSizeOfPointer, svfDataAddress, svfDataSize, svfMembers, svfIdentifier]);
|
||||
skChar: ;
|
||||
skFloat: ;
|
||||
skString: ;
|
||||
@ -336,6 +338,109 @@ begin
|
||||
inherited TearDown;
|
||||
end;
|
||||
|
||||
procedure TTestTypeInfo.TestExpressionInt;
|
||||
var
|
||||
sym: TDbgSymbol;
|
||||
ImgLoader: TTestLoaderSetupBasic;
|
||||
TmpResVal: TDbgSymbolValue;
|
||||
begin
|
||||
InitDwarf(TTestLoaderSetupBasic);
|
||||
ImgLoader := TTestLoaderSetupBasic(FImageLoader);
|
||||
//FMemReader.RegisterValues[5] := TDbgPtr(@ImgLoader.TestStackFrame.EndPoint);
|
||||
|
||||
|
||||
FCurrentContext := FDwarfInfo.FindContext(TTestSetupBasicProcMainAddr);
|
||||
AssertTrue('got ctx', FCurrentContext <> nil);
|
||||
|
||||
sym := FCurrentContext.FindSymbol('VarEnum0');
|
||||
AssertTrue('got sym', sym <> nil);
|
||||
sym.ReleaseReference();
|
||||
|
||||
|
||||
ImgLoader.GlobalVar.VarInt16 := 22;
|
||||
StartTest('VarInt16', skInteger, [ttHasType]);
|
||||
ExpFlags([svfInteger, svfOrdinal, svfAddress, svfSize], [svfSizeOfPointer, svfDataAddress, svfDataSize]);
|
||||
ExpResult(svfInteger, 22);
|
||||
ExpResult(svfOrdinal, QWord(22));
|
||||
ExpResult(svfAddress, TDbgPtr(PtrUInt(@ImgLoader.GlobalVar.VarInt16)));
|
||||
ExpResult(svfSize, SizeOf(ImgLoader.GlobalVar.VarInt16));
|
||||
|
||||
ImgLoader.GlobalVar.VarSub5 := -10;
|
||||
StartTest('VarSub5', skInteger, [ttHasType]);
|
||||
ExpFlags([svfInteger, svfOrdinal, svfAddress, svfSize], [svfSizeOfPointer, svfDataAddress, svfDataSize]);
|
||||
ExpResult(svfInteger, -10);
|
||||
ExpResult(svfOrdinal, QWord(-10));
|
||||
ExpResult(svfAddress, TDbgPtr(PtrUInt(@ImgLoader.GlobalVar.VarSub5)));
|
||||
ExpResult(svfSize, SizeOf(ImgLoader.GlobalVar.VarSub5));
|
||||
|
||||
|
||||
end;
|
||||
|
||||
procedure TTestTypeInfo.TestExpressionBool;
|
||||
var
|
||||
sym: TDbgSymbol;
|
||||
ImgLoader: TTestLoaderSetupBasic;
|
||||
TmpResVal: TDbgSymbolValue;
|
||||
i: Integer;
|
||||
s: String;
|
||||
begin
|
||||
InitDwarf(TTestLoaderSetupBasic);
|
||||
ImgLoader := TTestLoaderSetupBasic(FImageLoader);
|
||||
//FMemReader.RegisterValues[5] := TDbgPtr(@ImgLoader.TestStackFrame.EndPoint);
|
||||
|
||||
|
||||
FCurrentContext := FDwarfInfo.FindContext(TTestSetupBasicProcMainAddr);
|
||||
AssertTrue('got ctx', FCurrentContext <> nil);
|
||||
|
||||
sym := FCurrentContext.FindSymbol('VarEnum0');
|
||||
AssertTrue('got sym', sym <> nil);
|
||||
sym.ReleaseReference();
|
||||
|
||||
for i := 0 to 3 do begin
|
||||
case i of
|
||||
0: s := 'VarBoolean';
|
||||
1: s := 'Boolean(VarBoolean)';
|
||||
2: s := 'PBoolean(@VarBoolean)^';
|
||||
3: s := '^Boolean(@VarBoolean)^';
|
||||
end;
|
||||
|
||||
ImgLoader.GlobalVar.VarBoolean := True;
|
||||
StartTest(s, skBoolean, [ttHasType]);
|
||||
ExpFlags([svfBoolean, svfOrdinal, svfAddress, svfSize], [svfSizeOfPointer, svfDataAddress, svfDataSize]);
|
||||
ExpResult(svfBoolean, True);
|
||||
ExpResult(svfOrdinal, QWord(True));
|
||||
ExpResult(svfAddress, TDbgPtr(PtrUInt(@ImgLoader.GlobalVar.VarBoolean)));
|
||||
ExpResult(svfSize, SizeOf(ImgLoader.GlobalVar.VarBoolean));
|
||||
|
||||
ImgLoader.GlobalVar.VarBoolean := False;
|
||||
StartTest(s, skBoolean, [ttHasType]);
|
||||
ExpFlags([svfBoolean, svfOrdinal, svfAddress, svfSize], [svfSizeOfPointer, svfDataAddress, svfDataSize]);
|
||||
ExpResult(svfBoolean, False);
|
||||
ExpResult(svfOrdinal, QWord(False));
|
||||
|
||||
ImgLoader.GlobalVar.VarBoolean := boolean(100);
|
||||
StartTest(s, skBoolean, [ttHasType]);
|
||||
ExpFlags([svfBoolean, svfOrdinal, svfAddress, svfSize], [svfSizeOfPointer, svfDataAddress, svfDataSize]);
|
||||
ExpResult(svfBoolean, True);
|
||||
ExpResult(svfOrdinal, QWord(100));
|
||||
|
||||
end;
|
||||
|
||||
StartTest('Boolean(1)', skBoolean, [ttHasType]);
|
||||
ExpFlags([svfBoolean, svfOrdinal, svfSize], [svfAddress, svfSizeOfPointer, svfDataAddress, svfDataSize]);
|
||||
ExpResult(svfBoolean, True);
|
||||
ExpResult(svfOrdinal, QWord(1));
|
||||
|
||||
StartTest('Boolean(0)', skBoolean, [ttHasType]);
|
||||
ExpFlags([svfBoolean, svfOrdinal, svfSize], [svfAddress, svfSizeOfPointer, svfDataAddress, svfDataSize]);
|
||||
ExpResult(svfBoolean, False);
|
||||
ExpResult(svfOrdinal, QWord(0));
|
||||
|
||||
//TODO
|
||||
//StartTest('True', skBoolean, [ttHasType]);
|
||||
|
||||
end;
|
||||
|
||||
procedure TTestTypeInfo.TestExpressionStructures;
|
||||
var
|
||||
sym: TDbgSymbol;
|
||||
@ -1091,7 +1196,7 @@ begin
|
||||
ExpEnumVal('e3b', 1);
|
||||
ExpEnumMemberVal('e3b', 1);
|
||||
|
||||
ImgLoader.GlobalVar.VarRecEnum2.Enum2 := e2e;
|
||||
ImgLoader.GlobalVar.VarRecEnum2.VarEnum2 := e2e;
|
||||
StartTest('TEnum2(VarRecEnum2)', skEnum, [ttHasType]);
|
||||
ExpEnumVal('e2e', 4);
|
||||
ExpEnumMemberVal('e2e', 4);
|
||||
|
Loading…
Reference in New Issue
Block a user