[Lazarus] some workarounds [Re: Debugger problems]

Vincent Snijders vincent.snijders at gmail.com
Sat Feb 21 15:01:16 CET 2009


Martin Friebe schreef:
> Graeme Geldenhuys wrote:
>> On Sat, Feb 21, 2009 at 12:49 AM, Hans-Peter Diettrich
>> <DrDiettrich1 at aol.com> wrote:
>>   
>>> In most cases I cannot inspect local variables, due to "no such symbol
>>> in context" errors, even with fully disabled optimizations.
>>>     
>> This is exactly the errors I get. I develop under Linux only, so it
>> doesn't seem to be a platform issue. I gave up trying the integrated
>> debugger and simply use Log(..) or Writeln(...) calls now
>>   
> It is true that there are cases where GDB does not find Symbols, until 
> this can be fixed in a better way, here are a few cases and workarounds
> 
> 1) properties
> 
> This is apparently the most common case? GDB has no concept of 
> properties. Also properties can refer to functions.
> Possible workarounds:
> a) if a property refers to a Variable, use CodeTools to find the 
> variable name, and expect the Variable. Usually property abc, will point 
> to variable Fabc
> b) if the property refers to a method, there is no workaround, since 
> currently you can not force GDB to execute any method. Executing the 
> Method could also change the state of the debugged application.
> 
> 2) Nested Procedures
> 
> GDB does only see the current stack frame.
> 
> Procedure SomeObject.ABC
> var x: integer;
>   Procedure Nested
>   begin
>   end
> begin
> end
> 
> While in "Nested" gdb can NOT see anything that belongs to ABC. (this is 
> it can not see "x", and it can not see "self" (the object), or any 
> variable on the object)
> 
> Possible Workaround:
> Open the Stack Window, and change the current frame. I know this is a 
> bit dull, because you have to change it after each execution step.
> 
> 2a)
> The same applies to hints in the source window. *Variables*  will only 
> show if the stackframe is correct
> 
> 3)
> Sometimes Variables are pointers in GDB, where they are not in Pascal.
> 
> if you type SomeObject as a watch it may just say "TSomeClass 0x23ab76" 
> => try typing SomeObject^
> 
> 4) Dynamic arrays
> See the following post for a workaround (again it is too complex for 
> every day use, but it may help for desperate occasions)
> http://forum.lazarus.freepascal.org/index.php/topic,4763.msg22954.html#msg22954

I think it would be good if these valuable tips were added to the wiki.

Vincent



More information about the Lazarus mailing list