|
|
|
# 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 v8::Local handle value.
|
|
|
|
define jlh
|
|
|
|
call _v8_internal_Print_Object(*(v8::internal::Object**)(*$arg0))
|
|
|
|
end
|
|
|
|
document jlh
|
|
|
|
Print content of a v8::Local handle
|
|
|
|
Usage: jlh local_handle
|
|
|
|
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
|