| # Copyright 2014 the V8 project authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # Print HeapObjects. |
| define job |
| call _v8_internal_Print_Object((void*)($arg0)) |
| end |
| document job |
| Print a v8 JavaScript object |
| Usage: job tagged_ptr |
| end |
| |
| # Print Code objects containing given PC. |
| define jco |
| call _v8_internal_Print_Code((void*)($arg0)) |
| end |
| document jco |
| Print a v8 Code object from an internal code address |
| Usage: jco pc |
| end |
| |
| # Print TypeFeedbackVector |
| define jfv |
| call _v8_internal_Print_TypeFeedbackVector((void*)($arg0)) |
| end |
| document jfv |
| Print a v8 TypeFeedbackVector object |
| Usage: jtv tagged_ptr |
| end |
| |
| # Print DescriptorArray. |
| define jda |
| call _v8_internal_Print_DescriptorArray((void*)($arg0)) |
| end |
| document jda |
| Print a v8 DescriptorArray object |
| Usage: jda tagged_ptr |
| end |
| |
| # Print LayoutDescriptor. |
| define jld |
| call _v8_internal_Print_LayoutDescriptor((void*)($arg0)) |
| end |
| document jld |
| Print a v8 LayoutDescriptor object |
| Usage: jld tagged_ptr |
| end |
| |
| # Print TransitionArray. |
| define jta |
| call _v8_internal_Print_TransitionArray((void*)($arg0)) |
| end |
| document jta |
| Print a v8 TransitionArray object |
| Usage: jta tagged_ptr |
| end |
| |
| # Print JavaScript stack trace. |
| define jst |
| call _v8_internal_Print_StackTrace() |
| end |
| document jst |
| Print the current JavaScript stack trace |
| Usage: jst |
| end |
| |
| # Skip the JavaScript stack. |
| define jss |
| set $js_entry_sp=v8::internal::Isolate::Current()->thread_local_top()->js_entry_sp_ |
| set $rbp=*(void**)$js_entry_sp |
| set $rsp=$js_entry_sp + 2*sizeof(void*) |
| set $pc=*(void**)($js_entry_sp+sizeof(void*)) |
| end |
| document jss |
| Skip the jitted stack on x64 to where we entered JS last. |
| Usage: jss |
| end |
| |
| # Print stack trace with assertion scopes. |
| define bta |
| python |
| import re |
| frame_re = re.compile("^#(\d+)\s*(?:0x[a-f\d]+ in )?(.+) \(.+ at (.+)") |
| assert_re = re.compile("^\s*(\S+) = .+<v8::internal::Per\w+AssertType::(\w+)_ASSERT, (false|true)>") |
| btl = gdb.execute("backtrace full", to_string = True).splitlines() |
| for l in btl: |
| match = frame_re.match(l) |
| if match: |
| print("[%-2s] %-60s %-40s" % (match.group(1), match.group(2), match.group(3))) |
| match = assert_re.match(l) |
| if match: |
| if match.group(3) == "false": |
| prefix = "Disallow" |
| color = "\033[91m" |
| else: |
| prefix = "Allow" |
| color = "\033[92m" |
| print("%s -> %s %s (%s)\033[0m" % (color, prefix, match.group(2), match.group(1))) |
| end |
| end |
| document bta |
| Print stack trace with assertion scopes |
| Usage: bta |
| end |
| |
| set disassembly-flavor intel |
| set disable-randomization off |