1 # Copyright 2014 the V8 project authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 # Print HeapObjects. 6 define job 7 call _v8_internal_Print_Object((void*)($arg0)) 8 end 9 document job 10 Print a v8 JavaScript object 11 Usage: job tagged_ptr 12 end 13 14 # Print v8::Local handle value. 15 define jlh 16 call _v8_internal_Print_Object(*(v8::internal::Object**)(*$arg0)) 17 end 18 document jlh 19 Print content of a v8::Local handle 20 Usage: jlh local_handle 21 end 22 23 # Print Code objects containing given PC. 24 define jco 25 call _v8_internal_Print_Code((void*)($arg0)) 26 end 27 document jco 28 Print a v8 Code object from an internal code address 29 Usage: jco pc 30 end 31 32 # Print FeedbackVector 33 define jfv 34 call _v8_internal_Print_FeedbackVector((void*)($arg0)) 35 end 36 document jfv 37 Print a v8 FeedbackVector object 38 Usage: jfv tagged_ptr 39 end 40 41 # Print FeedbackMetadata 42 define jfm 43 call _v8_internal_Print_FeedbackMetadata((void*)($arg0)) 44 end 45 document jfm 46 Print a v8 FeedbackMetadata object 47 Usage: jfm tagged_ptr 48 end 49 50 51 # Print DescriptorArray. 52 define jda 53 call _v8_internal_Print_DescriptorArray((void*)($arg0)) 54 end 55 document jda 56 Print a v8 DescriptorArray object 57 Usage: jda tagged_ptr 58 end 59 60 # Print LayoutDescriptor. 61 define jld 62 call _v8_internal_Print_LayoutDescriptor((void*)($arg0)) 63 end 64 document jld 65 Print a v8 LayoutDescriptor object 66 Usage: jld tagged_ptr 67 end 68 69 # Print TransitionArray. 70 define jta 71 call _v8_internal_Print_TransitionArray((void*)($arg0)) 72 end 73 document jta 74 Print a v8 TransitionArray object 75 Usage: jta tagged_ptr 76 end 77 78 # Print JavaScript stack trace. 79 define jst 80 call _v8_internal_Print_StackTrace() 81 end 82 document jst 83 Print the current JavaScript stack trace 84 Usage: jst 85 end 86 87 # Skip the JavaScript stack. 88 define jss 89 set $js_entry_sp=v8::internal::Isolate::Current()->thread_local_top()->js_entry_sp_ 90 set $rbp=*(void**)$js_entry_sp 91 set $rsp=$js_entry_sp + 2*sizeof(void*) 92 set $pc=*(void**)($js_entry_sp+sizeof(void*)) 93 end 94 document jss 95 Skip the jitted stack on x64 to where we entered JS last. 96 Usage: jss 97 end 98 99 # Print stack trace with assertion scopes. 100 define bta 101 python 102 import re 103 frame_re = re.compile("^#(\d+)\s*(?:0x[a-f\d]+ in )?(.+) \(.+ at (.+)") 104 assert_re = re.compile("^\s*(\S+) = .+<v8::internal::Per\w+AssertType::(\w+)_ASSERT, (false|true)>") 105 btl = gdb.execute("backtrace full", to_string = True).splitlines() 106 for l in btl: 107 match = frame_re.match(l) 108 if match: 109 print("[%-2s] %-60s %-40s" % (match.group(1), match.group(2), match.group(3))) 110 match = assert_re.match(l) 111 if match: 112 if match.group(3) == "false": 113 prefix = "Disallow" 114 color = "\033[91m" 115 else: 116 prefix = "Allow" 117 color = "\033[92m" 118 print("%s -> %s %s (%s)\033[0m" % (color, prefix, match.group(2), match.group(1))) 119 end 120 end 121 document bta 122 Print stack trace with assertion scopes 123 Usage: bta 124 end 125 126 set disassembly-flavor intel 127 set disable-randomization off 128