[fpc-pascal] Proper way to cast dynamic array in watch window?

Jürgen Hestermann juergen.hestermann at gmx.de
Sun Nov 10 09:41:10 CET 2013


Am 2013-11-10 06:57, schrieb Jim Leonard:
> Using the FPC console IDE.  When I define a typed array with limits, ie.:
> type
>   tbarray=array[0..1023] of byte;
> var
>   foo:tbarray;
> ...I can view the contents of in the watch window (like "foo[2]") without problems.  But if I define it as a dynamic array:
> type
>   tbarray=array of byte;
> var
>   foo:tbarray;
> ...
> setlength(foo,1024);
>
> ...then trying to view the array ("foo[2]") in the watch window shows up as "Cannot perform pointer math on incomplete types, try casting to a known type, or void *".  I've tried casting like byte(foo[2]) and byte^(foo[2]) but I must be doing it wrong as those aren't working.
> What is the proper way to cast dynamic arrays so that I can inspect them in the watch window?

Dynamic arrays are actually *pointer* to arrays.
The compiler hides this fact from you because it automatically
dereferences the pointer when you use an index:

foo[i]
will be automatically expanded to
foo^[i]

But the debugger is not able to do this.
So you need to write

foo^[i]

when you want to examine this value in watch window or other debug windows.



More information about the fpc-pascal mailing list