Difference between revisions of "Debugging - GDB tricks"
From Lazarus wiki
Jump to navigationJump to searchm (Typos/grammar) |
|||
Line 1: | Line 1: | ||
= General tricks = | = General tricks = | ||
− | * Some pascal specific patches were | + | * Some pascal specific patches were accepted into GDB, so if possible set language to pascal "set language pascal" |
* To get help, use "help <command>" or "help" to see a category list. | * To get help, use "help <command>" or "help" to see a category list. | ||
− | * To view datastructures raw, use the | + | * To view datastructures in their raw form, use the "x" command (see "help x") |
== Examining Type Info == | == Examining Type Info == | ||
Line 16: | Line 16: | ||
== Stop debugger on exception == | == Stop debugger on exception == | ||
− | * Q: How to stop gdb on exception | + | * Q: How to stop gdb on exception? |
* A: b fpc_raiseexception | * A: b fpc_raiseexception | ||
− | * Q: How to show call stack | + | * Q: How to show call stack/backtrace? |
* A: bt | * A: bt | ||
Line 29: | Line 29: | ||
* Delete: d 1 | * Delete: d 1 | ||
* Delete all: d b | * Delete all: d b | ||
+ | |||
== Pointer == | == Pointer == | ||
− | + | When you print the value of a pointer gdb will say something like: | |
− | |||
$0 = (MYPTR) 0x0202 | $0 = (MYPTR) 0x0202 | ||
Line 44: | Line 44: | ||
If you do not have a separate type for the actual pointer type, but | If you do not have a separate type for the actual pointer type, but | ||
only a type for what it points to, then the syntax is somewhat awkward | only a type for what it points to, then the syntax is somewhat awkward | ||
− | because the gdb parser is still showing | + | because the gdb parser is still showing its C heritage in that case: |
p ^myvartype(ptrvar)^ | p ^myvartype(ptrvar)^ | ||
[[Category:Debugging]] | [[Category:Debugging]] |
Revision as of 13:38, 28 April 2012
General tricks
- Some pascal specific patches were accepted into GDB, so if possible set language to pascal "set language pascal"
- To get help, use "help <command>" or "help" to see a category list.
- To view datastructures in their raw form, use the "x" command (see "help x")
Examining Type Info
- Q: What function should I use for dumping the type info?
- A: Run x/100c in gdb until it frames. then use 'frame <framenr>' to jump to the correct frame
Inspecting an ansistring
- Q: How do I examine an ansistring?
- A: "x/s <stringname>"
Stop debugger on exception
- Q: How to stop gdb on exception?
- A: b fpc_raiseexception
- Q: How to show call stack/backtrace?
- A: bt
Work with breakpoints
- Add: b TObject__Method or b filename.pas:123
- Show: inf b
- Disable: dis 1
- Enble: en 1
- Delete: d 1
- Delete all: d b
Pointer
When you print the value of a pointer gdb will say something like:
$0 = (MYPTR) 0x0202
If MYPTR is the correct type, you can just use
p ptrvar^
if it's not the correct type, you can typecast it:
p realptrtype(ptrvar)^
If you do not have a separate type for the actual pointer type, but only a type for what it points to, then the syntax is somewhat awkward because the gdb parser is still showing its C heritage in that case:
p ^myvartype(ptrvar)^