Home | History | Annotate | Download | only in tools
      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