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