Difference between revisions of "IDE Window: Call Stack"

From Free Pascal wiki
m (Source)
m (Important)
Line 4: Line 4:
 
== Important ==  
 
== Important ==  
  
You have to set up a debugger (via Tools->Options->Debugger) and then start your project in order to debug it. Only then is the Call Stack window useful.  
+
You have to set up a debugger (via Tools->Options->Debugger) and then make sure your project is set to generate debug information in order to debug it (via Project->Project Options->Compiler Options->Linking; make sure you check "Generate debugging information for GDB"). Only then is the Call Stack window useful.  
 
The output shown on this page is based on the GNU debugger (GDB) which is currently the only debugger Lazarus supports. Its output looks at times like C, not Pascal. Other debuggers may show a more Pascal-like style.
 
The output shown on this page is based on the GNU debugger (GDB) which is currently the only debugger Lazarus supports. Its output looks at times like C, not Pascal. Other debuggers may show a more Pascal-like style.
  

Revision as of 18:37, 8 February 2012

Deutsch (de) English (en) français (fr)

Important

You have to set up a debugger (via Tools->Options->Debugger) and then make sure your project is set to generate debug information in order to debug it (via Project->Project Options->Compiler Options->Linking; make sure you check "Generate debugging information for GDB"). Only then is the Call Stack window useful. The output shown on this page is based on the GNU debugger (GDB) which is currently the only debugger Lazarus supports. Its output looks at times like C, not Pascal. Other debuggers may show a more Pascal-like style.

Dialog

Callstack.png

What is the call stack?

The call stack is the stack of function calls. The top line is the current function, the lowest line is the main program.

Source column

This column lists the filename of the source file. This information is retrieved from the debug information contained in the executable. Only those parts of the program explicitly compiled with debug information contain this information.

Line

If the position contains debugger information, the source line will be shown, otherwise only the address pointer in the executable is shown. This line is where the next function was called.

Note: The line is the line at compile time. If you inserted/deleted lines, they will not be accurate.

Function

The mangled name of the procedure/function. The compiler converts the pascal identifiers into names, useable by the gnu tools. For example:

 TAPPLICATION__CREATEFORM(0x81fb738, void, (^TAPPLICATION) 0xb7cd0014)

This means:

  • The mangled function name is TAPPLICATION__CREATEFORM, which is the TApplication.CreateForm procedure of the LCL unit forms.pp. Because pascal is case insensitive and the gnu tools are case sensitive, FPC converts the name to uppercase. Because the gnu tools don't know classes and objects, the class.method is converted to a global function name.
  • Then parameter list depends on the platform and the calling convention. That means the parameter list can be reversed, starting with the rightmost parameter. This is the case in the above example.
  • The 'Self' parameter is implicit. That means, you don't write it in the pascal source, and FPC creates it automatically. This is always the first parameter. Because of the reverse order, it is shown as the last parameter. It is of type ^TAPPLICATION and its hexadecimal value is 0xb7cd0014.
  • The next parameter in pascal is 'var Reference', which has no type. Therefore it is 'void'.
  • The last parameter in pascal is 'InstanceClass: TComponentClass'. The parameter is on gnu level just a pointer and has the hexadecimal value 0x81fb738.

Tricks

Double click on an item to jump to the source.

Popup menu

Callstack popmenu.png

Show

Jump to the source postion of the current item.

Set as current

Set the selected entry as the current frame. Local variables are only known within a frame. By setting the current frame, you can watch the values of variables in the context of the procedure you have selected.

Copy all

Copy the call stack to the clipboard.