Blame .gdbinit

Packit f0b94e
# .gdbinit file for debugging Mozilla
Packit f0b94e
Packit f0b94e
# You may need to put an 'add-auto-load-safe-path' command in your
Packit f0b94e
# $HOME/.gdbinit file to get GDB to trust this file. If your builds are
Packit f0b94e
# generally in $HOME/moz, then you can say:
Packit f0b94e
#
Packit f0b94e
#  add-auto-load-safe-path ~/moz
Packit f0b94e
Packit f0b94e
# Don't stop for the SIG32/33/etc signals that Flash produces
Packit f0b94e
handle SIG32 noprint nostop pass
Packit f0b94e
handle SIG33 noprint nostop pass
Packit f0b94e
handle SIGPIPE noprint nostop pass
Packit f0b94e
Packit f0b94e
# Don't stop for certain other signals where it's not useful,
Packit f0b94e
# such as the SIG64 signals triggered by the Linux
Packit f0b94e
# sandboxing code on older kernels.
Packit f0b94e
handle SIG38 noprint nostop pass
Packit f0b94e
handle SIG64 noprint nostop pass
Packit f0b94e
handle SIGSYS noprint nostop pass
Packit f0b94e
Packit f0b94e
# Show the concrete types behind nsIFoo
Packit f0b94e
set print object on
Packit f0b94e
Packit f0b94e
# run when using the auto-solib-add trick
Packit f0b94e
def prun
Packit f0b94e
        tbreak main
Packit f0b94e
        run
Packit f0b94e
	set auto-solib-add 0
Packit f0b94e
        cont
Packit f0b94e
end
Packit f0b94e
Packit f0b94e
# run -mail, when using the auto-solib-add trick
Packit f0b94e
def pmail
Packit f0b94e
        tbreak main
Packit f0b94e
        run -mail
Packit f0b94e
	set auto-solib-add 0
Packit f0b94e
        cont
Packit f0b94e
end
Packit f0b94e
Packit f0b94e
# Define a "pu" command to display PRUnichar * strings (100 chars max)
Packit f0b94e
# Also allows an optional argument for how many chars to print as long as
Packit f0b94e
# it's less than 100.
Packit f0b94e
def pu
Packit f0b94e
  set $uni = $arg0
Packit f0b94e
  if $argc == 2
Packit f0b94e
    set $limit = $arg1
Packit f0b94e
    if $limit > 100
Packit f0b94e
      set $limit = 100
Packit f0b94e
    end
Packit f0b94e
  else
Packit f0b94e
    set $limit = 100
Packit f0b94e
  end
Packit f0b94e
  # scratch array with space for 100 chars plus null terminator.  Make
Packit f0b94e
  # sure to not use ' ' as the char so this copy/pastes well.
Packit f0b94e
  set $scratch = "____________________________________________________________________________________________________"
Packit f0b94e
  set $i = 0
Packit f0b94e
  set $scratch_idx = 0
Packit f0b94e
  while (*$uni && $i++ < $limit)
Packit f0b94e
    if (*$uni < 0x80)
Packit f0b94e
      set $scratch[$scratch_idx++] = *(char*)$uni++
Packit f0b94e
    else
Packit f0b94e
      if ($scratch_idx > 0)
Packit f0b94e
	set $scratch[$scratch_idx] = '\0'
Packit f0b94e
	print $scratch
Packit f0b94e
	set $scratch_idx = 0
Packit f0b94e
      end
Packit f0b94e
      print /x *(short*)$uni++
Packit f0b94e
    end
Packit f0b94e
  end
Packit f0b94e
  if ($scratch_idx > 0)
Packit f0b94e
    set $scratch[$scratch_idx] = '\0'
Packit f0b94e
    print $scratch
Packit f0b94e
  end
Packit f0b94e
end
Packit f0b94e
Packit f0b94e
# Define a "ps" command to display subclasses of nsAC?String.  Note that
Packit f0b94e
# this assumes strings as of Gecko 1.9 (well, and probably a few
Packit f0b94e
# releases before that as well); going back far enough will get you
Packit f0b94e
# to string classes that this function doesn't work for.
Packit f0b94e
def ps
Packit f0b94e
  set $str = $arg0
Packit f0b94e
  if (sizeof(*$str.mData) == 1 && ($str.mFlags & 1) != 0)
Packit f0b94e
    print $str.mData
Packit f0b94e
  else
Packit f0b94e
    pu $str.mData $str.mLength
Packit f0b94e
  end
Packit f0b94e
end
Packit f0b94e
Packit f0b94e
# Define a "pa" command to display the string value for an nsAtom
Packit f0b94e
def pa
Packit f0b94e
  set $atom = $arg0
Packit f0b94e
  if (sizeof(*((&*$atom)->mString)) == 2)
Packit f0b94e
    pu (&*$atom)->mString
Packit f0b94e
  end
Packit f0b94e
end
Packit f0b94e
Packit f0b94e
# define a "pxul" command to display the type of a XUL element from
Packit f0b94e
# an nsXULElement* pointer.
Packit f0b94e
def pxul
Packit f0b94e
  set $p = $arg0
Packit f0b94e
  print $p->mNodeInfo.mRawPtr->mInner.mName->mStaticAtom->mString
Packit f0b94e
end
Packit f0b94e
Packit f0b94e
# define a "prefcnt" command to display the refcount of an XPCOM obj
Packit f0b94e
def prefcnt
Packit f0b94e
  set $p = $arg0
Packit f0b94e
  print ((nsPurpleBufferEntry*)$p->mRefCnt.mTagged)->mRefCnt
Packit f0b94e
end
Packit f0b94e
Packit f0b94e
# define a "ptag" command to display the tag name of a content node
Packit f0b94e
def ptag
Packit f0b94e
  set $p = $arg0
Packit f0b94e
  pa $p->mNodeInfo.mRawPtr->mInner.mName
Packit f0b94e
end
Packit f0b94e
Packit f0b94e
##
Packit f0b94e
## nsTArray
Packit f0b94e
##
Packit f0b94e
define ptarray
Packit f0b94e
        if $argc == 0
Packit f0b94e
                help ptarray
Packit f0b94e
        else
Packit f0b94e
                set $size = $arg0.mHdr->mLength
Packit f0b94e
                set $capacity = $arg0.mHdr->mCapacity
Packit f0b94e
                set $size_max = $size - 1
Packit f0b94e
                set $elts = $arg0.Elements()
Packit f0b94e
        end
Packit f0b94e
        if $argc == 1
Packit f0b94e
                set $i = 0
Packit f0b94e
                while $i < $size
Packit f0b94e
                        printf "elem[%u]: ", $i
Packit f0b94e
                        p *($elts + $i)
Packit f0b94e
                        set $i++
Packit f0b94e
                end
Packit f0b94e
        end
Packit f0b94e
        if $argc == 2
Packit f0b94e
                set $idx = $arg1
Packit f0b94e
                if $idx < 0 || $idx > $size_max
Packit f0b94e
                        printf "idx1, idx2 are not in acceptable range: [0..%u].\n", $size_max
Packit f0b94e
                else
Packit f0b94e
                        printf "elem[%u]: ", $idx
Packit f0b94e
                        p *($elts + $idx)
Packit f0b94e
                end
Packit f0b94e
        end
Packit f0b94e
        if $argc == 3
Packit f0b94e
          set $start_idx = $arg1
Packit f0b94e
          set $stop_idx = $arg2
Packit f0b94e
          if $start_idx > $stop_idx
Packit f0b94e
            set $tmp_idx = $start_idx
Packit f0b94e
            set $start_idx = $stop_idx
Packit f0b94e
            set $stop_idx = $tmp_idx
Packit f0b94e
          end
Packit f0b94e
          if $start_idx < 0 || $stop_idx < 0 || $start_idx > $size_max || $stop_idx > $size_max
Packit f0b94e
            printf "idx1, idx2 are not in acceptable range: [0..%u].\n", $size_max
Packit f0b94e
          else
Packit f0b94e
            set $i = $start_idx
Packit f0b94e
                while $i <= $stop_idx
Packit f0b94e
                        printf "elem[%u]: ", $i
Packit f0b94e
                        p *($elts + $i)
Packit f0b94e
                        set $i++
Packit f0b94e
                end
Packit f0b94e
          end
Packit f0b94e
        end
Packit f0b94e
        if $argc > 0
Packit f0b94e
                printf "nsTArray length = %u\n", $size
Packit f0b94e
                printf "nsTArray capacity = %u\n", $capacity
Packit f0b94e
                printf "Element "
Packit f0b94e
                whatis *$elts
Packit f0b94e
        end
Packit f0b94e
end
Packit f0b94e
Packit f0b94e
document ptarray
Packit f0b94e
        Prints nsTArray information.
Packit f0b94e
        Syntax: ptarray   
Packit f0b94e
        Note: idx, idx1 and idx2 must be in acceptable range [0...size()-1].
Packit f0b94e
        Examples:
Packit f0b94e
        ptarray a - Prints tarray content, size, capacity and T typedef
Packit f0b94e
        ptarray a 0 - Prints element[idx] from tarray
Packit f0b94e
        ptarray a 1 2 - Prints elements in range [idx1..idx2] from tarray
Packit f0b94e
end
Packit f0b94e
Packit f0b94e
def js
Packit f0b94e
  call DumpJSStack()
Packit f0b94e
end
Packit f0b94e
Packit f0b94e
def ft
Packit f0b94e
  call $arg0->DumpFrameTree()
Packit f0b94e
end
Packit f0b94e
Packit f0b94e
source .gdbinit_python