diff options
Diffstat (limited to '')
-rw-r--r-- | build/.gdbinit | 208 | ||||
-rw-r--r-- | build/.gdbinit.loader | 29 | ||||
-rw-r--r-- | build/.gdbinit.py.in | 19 |
3 files changed, 256 insertions, 0 deletions
diff --git a/build/.gdbinit b/build/.gdbinit new file mode 100644 index 0000000000..870c0a81da --- /dev/null +++ b/build/.gdbinit @@ -0,0 +1,208 @@ +# 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 produces +handle SIG32 noprint nostop pass +handle SIG33 noprint nostop pass +handle 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 pass +handle SIG64 noprint nostop pass +handle SIGSYS noprint nostop pass + +# Show the concrete types behind nsIFoo +set print object on + +# run when using the auto-solib-add trick +define prun + tbreak main + run + set auto-solib-add 0 + cont +end + +# run -mail, when using the auto-solib-add trick +define pmail + tbreak main + run -mail + set auto-solib-add 0 + cont +end + +# 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 + end +end + +# 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 + end +end + +# Define a "pa" command to display the string value for an nsAtom +define pa + set $atom = $arg0 + if (sizeof(*((&*$atom)->mString)) == 2) + pu (&*$atom)->mString + end +end + +# 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->mString +end + +# define a "prefcnt" command to display the refcount of an XPCOM obj +define prefcnt + set $p = $arg0 + print ((nsPurpleBufferEntry*)$p->mRefCnt.mTagged)->mRefCnt +end + +# define a "ptag" command to display the tag name of a content node +define ptag + set $p = $arg0 + pa $p->mNodeInfo.mRawPtr->mInner.mName +end + +## +## 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 + end +end + +document 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 tarray +end + +define js + call DumpJSStack() +end + +define ct + call $arg0->Dump() +end + +define ft + call $arg0->DumpFrameTree() +end + +define ftp + call $arg0->DumpFrameTreeInCSSPixels() +end + +define ftl + call $arg0->DumpFrameTreeLimited() +end + +define ftlp + call $arg0->DumpFrameTreeLimitedInCSSPixels() +end diff --git a/build/.gdbinit.loader b/build/.gdbinit.loader new file mode 100644 index 0000000000..e8a13432f7 --- /dev/null +++ b/build/.gdbinit.loader @@ -0,0 +1,29 @@ +# 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/. + +# loader for .gdbinit file + +# This file provides a guard against multiple inclusion. GDB command syntax is +# rather limited in that you cannot have a `documentation` command inside of an +# `if`. So we use a separate loader file that sources `.gdbinit` within the +# `if`. + +# 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 + +# Multiple include guard +if $_moz_gdbinit_loaded + # already loaded +else + set $_moz_gdbinit_loaded=1 + + source -s build/.gdbinit + + # This requires $objdir to have been added to gdb's source directory search + # path. Normally this will be done by libxul.so-gdb.py or js-gdb.py. + source -s build/.gdbinit.py +end diff --git a/build/.gdbinit.py.in b/build/.gdbinit.py.in new file mode 100644 index 0000000000..ec8c11b51b --- /dev/null +++ b/build/.gdbinit.py.in @@ -0,0 +1,19 @@ +#filter substitution + +import os +import sys + +sys.path.append(os.path.join('@topsrcdir@', 'js', 'src', 'gdb')) +sys.path.append(os.path.join('@topsrcdir@', 'python', 'gdbpp')) + +# JS prettyprinters + +import mozilla.autoload +mozilla.autoload.register(gdb.current_objfile()) + +import mozilla.asmjs +mozilla.asmjs.install() + +# Gecko prettyprinters + +import gdbpp |