1# This Source Code Form is subject to the terms of the Mozilla Public 2# License, v. 2.0. If a copy of the MPL was not distributed with this 3# file, You can obtain one at http://mozilla.org/MPL/2.0/. 4 5# .gdbinit file for debugging Mozilla 6 7# You may need to put an 'add-auto-load-safe-path' command in your 8# $HOME/.gdbinit file to get GDB to trust this file. If your builds are 9# generally in $HOME/moz, then you can say: 10# 11# add-auto-load-safe-path ~/moz 12 13# Don't stop for the SIG32/33/etc signals that Flash produces 14handle SIG32 noprint nostop pass 15handle SIG33 noprint nostop pass 16handle SIGPIPE noprint nostop pass 17 18# Don't stop for certain other signals where it's not useful, 19# such as the SIG64 signals triggered by the Linux 20# sandboxing code on older kernels. 21handle SIG38 noprint nostop pass 22handle SIG64 noprint nostop pass 23handle SIGSYS noprint nostop pass 24 25# Show the concrete types behind nsIFoo 26set print object on 27 28# run when using the auto-solib-add trick 29define prun 30 tbreak main 31 run 32 set auto-solib-add 0 33 cont 34end 35 36# run -mail, when using the auto-solib-add trick 37define pmail 38 tbreak main 39 run -mail 40 set auto-solib-add 0 41 cont 42end 43 44# Define a "pu" command to display PRUnichar * strings (100 chars max) 45# Also allows an optional argument for how many chars to print as long as 46# it's less than 100. 47define pu 48 set $uni = $arg0 49 if $argc == 2 50 set $limit = $arg1 51 if $limit > 100 52 set $limit = 100 53 end 54 else 55 set $limit = 100 56 end 57 # scratch array with space for 100 chars plus null terminator. Make 58 # sure to not use ' ' as the char so this copy/pastes well. 59 set $scratch = "____________________________________________________________________________________________________" 60 set $i = 0 61 set $scratch_idx = 0 62 while (*$uni && $i++ < $limit) 63 if (*$uni < 0x80) 64 set $scratch[$scratch_idx++] = *(char*)$uni++ 65 else 66 if ($scratch_idx > 0) 67 set $scratch[$scratch_idx] = '\0' 68 print $scratch 69 set $scratch_idx = 0 70 end 71 print /x *(short*)$uni++ 72 end 73 end 74 if ($scratch_idx > 0) 75 set $scratch[$scratch_idx] = '\0' 76 print $scratch 77 end 78end 79 80# Define a "ps" command to display subclasses of nsAC?String. Note that 81# this assumes strings as of Gecko 1.9 (well, and probably a few 82# releases before that as well); going back far enough will get you 83# to string classes that this function doesn't work for. 84define ps 85 set $str = $arg0 86 if (sizeof(*$str.mData) == 1 && ($str.mFlags & 1) != 0) 87 print $str.mData 88 else 89 pu $str.mData $str.mLength 90 end 91end 92 93# Define a "pa" command to display the string value for an nsAtom 94define pa 95 set $atom = $arg0 96 if (sizeof(*((&*$atom)->mString)) == 2) 97 pu (&*$atom)->mString 98 end 99end 100 101# define a "pxul" command to display the type of a XUL element from 102# an nsXULElement* pointer. 103define pxul 104 set $p = $arg0 105 print $p->mNodeInfo.mRawPtr->mInner.mName->mStaticAtom->mString 106end 107 108# define a "prefcnt" command to display the refcount of an XPCOM obj 109define prefcnt 110 set $p = $arg0 111 print ((nsPurpleBufferEntry*)$p->mRefCnt.mTagged)->mRefCnt 112end 113 114# define a "ptag" command to display the tag name of a content node 115define ptag 116 set $p = $arg0 117 pa $p->mNodeInfo.mRawPtr->mInner.mName 118end 119 120## 121## nsTArray 122## 123define ptarray 124 if $argc == 0 125 help ptarray 126 else 127 set $size = $arg0.mHdr->mLength 128 set $capacity = $arg0.mHdr->mCapacity 129 set $size_max = $size - 1 130 set $elts = $arg0.Elements() 131 end 132 if $argc == 1 133 set $i = 0 134 while $i < $size 135 printf "elem[%u]: ", $i 136 p *($elts + $i) 137 set $i++ 138 end 139 end 140 if $argc == 2 141 set $idx = $arg1 142 if $idx < 0 || $idx > $size_max 143 printf "idx1, idx2 are not in acceptable range: [0..%u].\n", $size_max 144 else 145 printf "elem[%u]: ", $idx 146 p *($elts + $idx) 147 end 148 end 149 if $argc == 3 150 set $start_idx = $arg1 151 set $stop_idx = $arg2 152 if $start_idx > $stop_idx 153 set $tmp_idx = $start_idx 154 set $start_idx = $stop_idx 155 set $stop_idx = $tmp_idx 156 end 157 if $start_idx < 0 || $stop_idx < 0 || $start_idx > $size_max || $stop_idx > $size_max 158 printf "idx1, idx2 are not in acceptable range: [0..%u].\n", $size_max 159 else 160 set $i = $start_idx 161 while $i <= $stop_idx 162 printf "elem[%u]: ", $i 163 p *($elts + $i) 164 set $i++ 165 end 166 end 167 end 168 if $argc > 0 169 printf "nsTArray length = %u\n", $size 170 printf "nsTArray capacity = %u\n", $capacity 171 printf "Element " 172 whatis *$elts 173 end 174end 175 176document ptarray 177 Prints nsTArray information. 178 Syntax: ptarray 179 Note: idx, idx1 and idx2 must be in acceptable range [0...size()-1]. 180 Examples: 181 ptarray a - Prints tarray content, size, capacity and T typedef 182 ptarray a 0 - Prints element[idx] from tarray 183 ptarray a 1 2 - Prints elements in range [idx1..idx2] from tarray 184end 185 186define js 187 call DumpJSStack() 188end 189 190define ct 191 call $arg0->Dump() 192end 193 194define ft 195 call $arg0->DumpFrameTree() 196end 197 198define ftp 199 call $arg0->DumpFrameTreeInCSSPixels() 200end 201 202define ftl 203 call $arg0->DumpFrameTreeLimited() 204end 205 206define ftlp 207 call $arg0->DumpFrameTreeLimitedInCSSPixels() 208end 209