There are some peculiarities of Free Pascal which you should be aware of when using gdb. We list
the main ones here:
     
- 
  1. 
 - Free Pascal generates information for GDB in uppercase letters. This is a consequence
     of the fact that Pascal is a case insensitive language. So, when referring to a variable
     or function, you need to make its name all uppercase.
     
As an example, if you want to watch the value of a loop variable count, you should
     type
                                                                            
                                                                            
     
     watch COUNT
     Or if you want to stop when a certain function (e.g MyFunction) is called, type
                                                                            
                                                                            
     
     break MYFUNCTION
     
     
 - 
  2. 
 - gdb does not know sets.
     
 - 
  3. 
 - gdb doesn’t know strings. Strings are represented in gdb as records with a length field and an
     array of char containing the string.
     
You can also use the following user function to print strings:
                                                                            
                                                                            
     
     define pst
      
set $pos=&$arg0
      
set $strlen = {byte}$pos
      
print {char}&$arg0.st@($strlen+1)
      
end
      
      
document pst
      
  Print out a Pascal string
      
end
     If you insert it in your gdb.ini file, you can look at a string with this function. There is a
     sample gdb.ini in appendix E.
     
 - 
  4. 
 - Objects are difficult to handle, mainly because gdb is oriented towards C and C++. The
     workaround implemented in Free Pascal is that object methods are represented as functions,
     with an extra parameter this (all lowercase!). The name of this function is a
     concatenation of the object type and the function name, separated by two underscore
     characters.
     
For example, the method TPoint.Draw would be converted to TPOINT__DRAW, and you could
     stop at it by using:
                                                                            
                                                                            
     
     break TPOINT__DRAW
     
     
 - 
  5. 
 - Global overloaded functions confuse gdb because they have the same name. Thus
     you cannot set a breakpoint at an overloaded function, unless you know its line
     number, in which case you can set a breakpoint at the starting line number of the
     function.