| Version 1 (modified by , 17 years ago) ( diff ) |
|---|
Most of this has been contributed by Robert Lupton, edited and supplemented by Paul Price. The more Pan-STARRS-centric definitions are towards the end.
Put this in your <tt>~/.gdbinit</tt> file:
<pre> ############################################################################################################# # .gdbinit file # # Mostly copied from Robert Lupton, 30 Jan 2006 #############################################################################################################
############################################################################################################# # Setups #############################################################################################################
#set confirm off #set heuristic-fence-post 10000 #show follow-fork-mode set history save set history size 1000 set lang c set print null-stop set print pretty off set print symbol-filename on
def consts
set $pi=3.141592654 set $SH_SUCCESS = 0x8001c009 set $SH_GENERIC_ERROR = 16384
end document consts
Set various interesting values. Gdb clears them everytime it loads an image, as it thinks that the meaning of "float" or "int" may have changed
end
# Often finds what we need, and does no harm dir src
############################################################################################################# # Macros --- making life simple #############################################################################################################
define bell
printf "\a"
end document bell
Ring the bell
end
define cc
signal 2
end document cc
Send CTRL-C signal
end
define dl
delete $bpnum printf "Deleting breakpoint %d\n", $bpnum--
end document dl
Delete the most recent breakpoint
end
define f0
frame 0 list
end document f0
List frame 0
end
define ni
nexti x/i $pc
end document ni
Go to next instruction, and print it
end
define si
stepi x/i $pc
end document si
Step to next instruction, and print it
end
define pdeg
print ($arg0)*180/3.1415926536
end document pdeg
Print a value given in radians in degrees
end
define pdeg2
output ($arg0)*180/3.1415926536 printf " " output ($arg1)*180/3.1415926536 printf "\n"
end document pdeg2
Print two numbers, converting from radians to degrees
end
define p2
output $arg0 printf " " output $arg1 printf "\n"
end document p2
Print two numbers
end
define p3
output $arg0 printf " " output $arg1 printf " " output $arg2 printf "\n"
end document p3
Print three numbers
end
define p4
output $arg0 printf " " output $arg1 printf " " output $arg2 printf " " output $arg3 printf "\n"
end document p4
Print four numbers
end
def pp
set print pretty on print $arg0 set print pretty off
end document pp
Print an expression with pretty print on
end
define ret
return continue
end
define rr
dont-repeat run
end document rr
Run with no confirmation required
end
def rn
run null -
end document rn
Run with null arguments
end
define w
where 7 echo \t...\n
end document w
Where am I? Print a backtrace of 7 lines max
end
############################################################################################################# # Loops #############################################################################################################
define loop
set $i=$arg0 while $i < $arg1
output $i echo \t $arg2 $arg3 set $i++
end
end document loop
Repeat the command "$arg2 $arg3" for $i = $arg0 .. $arg1-1
\ e.g. \ loop 0 5 p objc->color[$i]->id \ loop 0 5 ppeak objc->color[$i]->peaks->peak[0] \ \ if foo is: \ follow2 $arg0 ->next 10 ppeak \ \ loop 0 5 foo objc->color[$i]->peaks->peak \ See also sloop, which doesn't print the loop counter end
define loop2
set $i=$arg0 while $i < $arg1
output $i echo \t $arg2 $arg3 $arg4 set $i++
end
end document loop2
Repeat the command "$arg2 $arg3 $arg4" for $i = $arg0 .. $arg1-1 See also sloop2, which doesn't print the loop counter
end
define loop3
set $i=$arg0 while $i < $arg1
output $i echo \t $arg2 $arg3 $arg4 $arg5 set $i++
end
end document loop3
Repeat the command "$arg2 $arg3 $arg4 $arg5" for $i = $arg0 .. $arg1-1
end
define sloop
set $i=$arg0 while $i < $arg1
$arg2 $arg3 set $i++
end
end document sloop
Identical to loop, but don't print the loop counter
end
define sloop2
set $i=$arg0 while $i < $arg1
$arg2 $arg3 $arg4 set $i++
end
end document sloop2
Like loop2, but don't print the loop counter
end
define sloop3
set $i=$arg0 while $i < $arg1
$arg2 $arg3 $arg4 $arg5 set $i++
end
end document sloop3
Like loop3, but don't print the loop counter
end
define iloop
set $i_i=$arg0 while $i_i < $arg1
output $i_i echo \t $arg2 $arg3 set $i_i++
end
end document iloop
Identical to loop (except that the variable's called $i_i), but used internally in e.g. pmask
end
define follow
set $follow = 0 set $next = $arg0 while $follow < $arg2 && $next != 0
output $follow echo \t output ($next $arg3) echo \n set $follow++ set $next = $next $arg1
end
end document follow
Follow a chain of $arg1 pointers from $arg0, until they reach a NULL (max: $arg2 elements). For each element "ptr", execute
output ptr $arg3
E.g.
follow peaks->peaks ->next 10 ->colc follow peaks->peaks ->next 10 [0]
where the latter prints the entire element. See also follow2 to apply a specified command to each element.
end
define follow2
set $follow = 0 set $next = $arg0 while $follow < $arg2 && $next != 0
output $follow echo \t $arg3 $next
set $follow++ set $next = $next $arg1
end
end document follow2
Follow a chain of $arg1 pointers from $arg0, until they reach a NULL (max: $arg2 elements). For each element "ptr", execute
$arg3 ptr
E.g.
follow2 peaks->peaks ->next 10 ppeak
to print the centres of a set of peaks. See also follow to print a given element
end
define sum
set $iSAVED=$i set $i=$arg0 set $sum = 0 while $i < $arg1
set $sum += $arg2 set $i++
end set $i=$iSAVED output $sum printf "\n"
end document sum
Evaluate sum_{$i = $arg0}{$i = $arg1-1} $arg2
e.g. sum 0 10 foo[$i].n
end
############################################################################################################# # Pan-STARRS pslib setup for gdb # # Provided by Robert Lupton, some changes 30 Jan 2006 #############################################################################################################
define pserror
break p_psError
end document pserror
Set a break point on calls to psError()
end
define pswarn
break p_psWarning
end document pswarn
Set a break point on warnings
end
set $p_psMemAllocID = -1 define psallocid
if $arg0 < 0
set $p_psMemAllocID = -1 set $i = 0 - $arg0 psallocid $i
else
if $p_psMemAllocID == -1
b memAllocCallbackDefault set $p_psMemAllocID = $arg0 #b main if p_psMemAllocID = $p_psMemAllocID, 0 #b main if p_psMemAllocID == 0 && psMemAllocCallbackSetID((psMemId)$p_psMemAllocID), 0
end
set $p_psMemAllocID = $arg0 #set p_psMemAllocID = $p_psMemAllocID call psMemAllocCallbackSetID((psMemId)$p_psMemAllocID)
end
end document psallocid
Break when memory ID $p_psMemAllocID == $ARG0 is allocated. N.b. if $ARG0 is negative, set the breakpoints, and set the threshold at |$ARG0|
end
set $p_psMemFreeID = -1 define psfreeid
if $arg0 < 0
set $p_psMemFreeID = -1 set $i = 0 - $arg0 psfreeid $i
else
if $p_psMemFreeID == -1
b memFreeCallbackDefault #b main if p_psMemFreeID == 0 && psMemFreeCallbackSetID($p_psMemFreeID), 0
end
set $p_psMemFreeID = $arg0 call psMemFreeCallbackSetID($p_psMemFreeID)
end
end document psfreeid
Break when memory ID $p_psMemFreeID == $ARG0 is freed
end
def psmemid
psallocid $arg0 psfreeid $arg0
end document psmemid
Set both alloc and free callbacks to arg0
end
define psmem
set $psmem = ((psMemBlock*)$arg0 - 1) print $psmem->id
end document psmem
Set $psmem to $arg0's psMemBlock, and print $psmem->id. This is equivalent to saying:
((psMemBlock *)ptr - 1)->id
an expression which can be useful in setting break points. You can set such a condition on breakpoint 123 by saying
psmemb 123 ptr 1069669
end
define psmemprint
set $psmem = ((psMemBlock*)$arg0 - 1) psmemblock $psmem
end document psmemprint
Use psmemblock to print the psMemBlock associated with $arg0 (use print *$psmem for full details)
end
define psmemblock
set $_arg0 = (psMemBlock *)$arg0 printf "ID: %d (%s:%d) refCntr: %d persistent: %d corrupt: %d freeFunc: ", \
$_arg0->id, $_arg0->file, $_arg0->lineno, $_arg0->refCounter, $_arg0->persistent, \
($_arg0->startblock != 0xdeadbeef $_arg0->endblock != 0xdeadbeef (void*)((char *)($_arg0 + 1) + $_arg0->userMemorySize) != 0xdeadbeef ? 1 : 0)
output $_arg0->freeFunc printf "\n"
end document psmemblock
Pretty-print the interesting bits of a psMemBlock $arg0
end
define psmembreak
cond $arg0 $arg1 != 0 && ((psMemBlock*)$arg1 - 1)->id == $arg2
end document psmembreak
Make breakpoint $arg0 conditional on $arg1's memory serial number being $arg2
end
define psimagewrite
printf "Writing to %s\n", $arg0 set $fits = psFitsOpen($arg0, "w") call psFitsWriteImage($fits, 0, $arg1, 0, 0) call psFitsClose($fits)
end document psimagewrite
Write a psImage ($arg1) to a FITS file ($arg0).
end
define psmetadataitem
break psMetadataItemAllocV if metadataId + 1 == $arg0
end document psmetadataitem
Break on allocating item with id number ($arg0).
end
define pscheckcorruption
call p_psMemCheckCorruption("gdb", 0, "gdb", stderr, 0)
end document pscheckcorruption
Check for memory corruption.
end
define psmetadatalist
set $listptr = $arg0->list->head set $listindex = 0 while ($listptr != 0)
set $listitem = (psMetadataItem*)$listptr->data printf "%d: %s (%s)\n", $listindex, $listitem->name, $listitem->comment set $listptr = $listptr->next set $listindex++
end
end document psmetadatalist
List all the elements of a psMetadata ($arg0)
end
define psmetadataget
set $listptr = $arg0->list->head set $listindex = 0 while ($listptr != 0 && $listindex != $arg1)
set $listptr = $listptr->next set $listindex++
end set $listitem = (psMetadataItem*)$listptr->data print *$listitem
end document psmetadataget
Get the nominated element ($arg1) of a psMetadata ($arg0)
end </pre>
