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