Commit 155d2bc4 authored by Kim-Anh Tran's avatar Kim-Anh Tran Committed by Commit Bot

[wasm][debug] Add stack scope to CDP and V8

This change adds a stack scope for wasm debugging.
Currently the local scope contains both local variables as well as
the expression stack. For now, this change duplicates the information
available on stacks into the stack scope, until we have added
support for the stack scope in the DevTools front-end.

Bug: chromium:1043034
Change-Id: Ib0a07e07be7c53003526a7b1e1dbfaa1116b41ad
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2093510
Commit-Queue: Kim-Anh Tran <kimanh@chromium.org>
Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
Reviewed-by: 's avatarClemens Backes <clemensb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#66867}
parent d014e8f7
......@@ -119,6 +119,7 @@ domain Debugger
script
eval
module
wasm-expression-stack
# Object representing the scope. For `global` and `with` scopes it represents the actual
# object; for the rest of the scopes, it is artificial transient object enumerating scope
# variables as its properties.
......
......@@ -423,7 +423,8 @@ class V8_EXPORT_PRIVATE ScopeIterator {
ScopeTypeBlock,
ScopeTypeScript,
ScopeTypeEval,
ScopeTypeModule
ScopeTypeModule,
ScopeTypeWasmExpressionStack
};
virtual bool Done() = 0;
......
......@@ -137,17 +137,24 @@ DebugWasmScopeIterator::DebugWasmScopeIterator(Isolate* isolate,
type_(debug::ScopeIterator::ScopeTypeGlobal) {}
bool DebugWasmScopeIterator::Done() {
return type_ != debug::ScopeIterator::ScopeTypeGlobal &&
type_ != debug::ScopeIterator::ScopeTypeLocal;
return type_ == debug::ScopeIterator::ScopeTypeWith;
}
void DebugWasmScopeIterator::Advance() {
DCHECK(!Done());
if (type_ == debug::ScopeIterator::ScopeTypeGlobal) {
switch (type_) {
case ScopeTypeGlobal:
type_ = debug::ScopeIterator::ScopeTypeLocal;
} else {
break;
case ScopeTypeLocal:
type_ = debug::ScopeIterator::ScopeTypeWasmExpressionStack;
break;
case ScopeTypeWasmExpressionStack:
// We use ScopeTypeWith type as marker for done.
type_ = debug::ScopeIterator::ScopeTypeWith;
break;
default:
UNREACHABLE();
}
}
......@@ -178,6 +185,20 @@ v8::Local<v8::Object> DebugWasmScopeIterator::GetObject() {
return Utils::ToLocal(debug_info->GetLocalScopeObject(
isolate_, frame_->pc(), frame_->fp(), frame_->callee_fp()));
}
case debug::ScopeIterator::ScopeTypeWasmExpressionStack: {
if (frame_->is_wasm_interpreter_entry()) {
Handle<WasmDebugInfo> debug_info(
WasmInterpreterEntryFrame::cast(frame_)->debug_info(), isolate_);
return Utils::ToLocal(WasmDebugInfo::GetStackScopeObject(
debug_info, frame_->fp(), inlined_frame_index_));
}
// Compiled code.
DCHECK(frame_->is_wasm_compiled());
wasm::DebugInfo* debug_info =
WasmCompiledFrame::cast(frame_)->native_module()->GetDebugInfo();
return Utils::ToLocal(debug_info->GetStackScopeObject(
isolate_, frame_->pc(), frame_->fp(), frame_->callee_fp()));
}
default:
return {};
}
......
......@@ -243,6 +243,8 @@ String16 scopeType(v8::debug::ScopeIterator::ScopeType type) {
return Scope::TypeEnum::Eval;
case v8::debug::ScopeIterator::ScopeTypeModule:
return Scope::TypeEnum::Module;
case v8::debug::ScopeIterator::ScopeTypeWasmExpressionStack:
return Scope::TypeEnum::WasmExpressionStack;
}
UNREACHABLE();
return String16();
......
......@@ -685,6 +685,9 @@ v8::MaybeLocal<v8::Value> V8Debugger::getTargetScopes(
case v8::debug::ScopeIterator::ScopeTypeModule:
description = "Module" + nameSuffix;
break;
case v8::debug::ScopeIterator::ScopeTypeWasmExpressionStack:
description = "Wasm Expression Stack" + nameSuffix;
break;
}
v8::Local<v8::Object> object = iterator->GetObject();
createDataProperty(context, scope,
......
......@@ -439,6 +439,24 @@ class InterpreterHandle {
return local_scope_object;
}
Handle<JSObject> GetStackScopeObject(InterpretedFrame* frame,
Handle<WasmDebugInfo> debug_info) {
// Fill stack values.
int stack_count = frame->GetStackHeight();
// Use an object without prototype instead of an Array, for nicer displaying
// in DevTools. For Arrays, the length field and prototype is displayed,
// which does not make too much sense here.
Handle<JSObject> stack_scope_obj =
isolate_->factory()->NewJSObjectWithNullProto();
for (int i = 0; i < stack_count; ++i) {
WasmValue value = frame->GetStackValue(stack_count - i - 1);
Handle<Object> value_obj = WasmValueToValueObject(isolate_, value);
JSObject::AddDataElement(stack_scope_obj, static_cast<uint32_t>(i),
value_obj, NONE);
}
return stack_scope_obj;
}
private:
DISALLOW_COPY_AND_ASSIGN(InterpreterHandle);
};
......@@ -621,6 +639,39 @@ class DebugInfoImpl {
return local_scope_object;
}
Handle<JSObject> GetStackScopeObject(Isolate* isolate, Address pc, Address fp,
Address debug_break_fp) {
Handle<JSObject> stack_scope_obj =
isolate->factory()->NewJSObjectWithNullProto();
wasm::WasmCodeRefScope wasm_code_ref_scope;
wasm::WasmCode* code =
isolate->wasm_engine()->code_manager()->LookupCode(pc);
// Only Liftoff code can be inspected.
if (!code->is_liftoff()) return stack_scope_obj;
auto* debug_side_table = GetDebugSideTable(code, isolate->allocator());
int pc_offset = static_cast<int>(pc - code->instruction_start());
auto* debug_side_table_entry = debug_side_table->GetEntry(pc_offset);
DCHECK_NOT_NULL(debug_side_table_entry);
// Fill stack values.
// Use an object without prototype instead of an Array, for nicer displaying
// in DevTools. For Arrays, the length field and prototype is displayed,
// which does not make too much sense here.
int num_locals = static_cast<int>(debug_side_table->num_locals());
int value_count = debug_side_table_entry->num_values();
int stack_count = value_count - num_locals;
for (int i = 0; i < stack_count; ++i) {
WasmValue value = GetValue(debug_side_table_entry, value_count - i - 1,
fp, debug_break_fp);
Handle<Object> value_obj = WasmValueToValueObject(isolate, value);
JSObject::AddDataElement(stack_scope_obj, static_cast<uint32_t>(i),
value_obj, NONE);
}
return stack_scope_obj;
}
WireBytesRef GetLocalName(int func_index, int local_index) {
base::MutexGuard guard(&mutex_);
if (!local_names_) {
......@@ -926,6 +977,12 @@ Handle<JSObject> DebugInfo::GetLocalScopeObject(Isolate* isolate, Address pc,
return impl_->GetLocalScopeObject(isolate, pc, fp, debug_break_fp);
}
Handle<JSObject> DebugInfo::GetStackScopeObject(Isolate* isolate, Address pc,
Address fp,
Address debug_break_fp) {
return impl_->GetStackScopeObject(isolate, pc, fp, debug_break_fp);
}
WireBytesRef DebugInfo::GetLocalName(int func_index, int local_index) {
return impl_->GetLocalName(func_index, local_index);
}
......@@ -1129,6 +1186,14 @@ Handle<JSObject> WasmDebugInfo::GetLocalScopeObject(
return interp_handle->GetLocalScopeObject(frame.get(), debug_info);
}
// static
Handle<JSObject> WasmDebugInfo::GetStackScopeObject(
Handle<WasmDebugInfo> debug_info, Address frame_pointer, int frame_index) {
auto* interp_handle = GetInterpreterHandle(*debug_info);
auto frame = interp_handle->GetInterpretedFrame(frame_pointer, frame_index);
return interp_handle->GetStackScopeObject(frame.get(), debug_info);
}
// static
Handle<Code> WasmDebugInfo::GetCWasmEntry(Handle<WasmDebugInfo> debug_info,
const wasm::FunctionSig* sig) {
......
......@@ -146,6 +146,9 @@ class DebugInfo {
Handle<JSObject> GetLocalScopeObject(Isolate*, Address pc, Address fp,
Address debug_break_fp);
Handle<JSObject> GetStackScopeObject(Isolate*, Address pc, Address fp,
Address debug_break_fp);
WireBytesRef GetLocalName(int func_index, int local_index);
void SetBreakpoint(int func_index, int offset, Isolate* current_isolate);
......
......@@ -879,6 +879,12 @@ class WasmDebugInfo : public Struct {
Address frame_pointer,
int frame_index);
// Get stack scope details for a specific interpreted frame. It contains
// information about stack values.
static Handle<JSObject> GetStackScopeObject(Handle<WasmDebugInfo>,
Address frame_pointer,
int frame_index);
V8_EXPORT_PRIVATE static Handle<Code> GetCWasmEntry(Handle<WasmDebugInfo>,
const wasm::FunctionSig*);
......
......@@ -17,12 +17,14 @@ at func (0:69):
- scope (local):
locals: "0": 0 (number), "i32Arg": 4 (number), "var1": 0 (number), "i64_local": 0 (number), "unicode☼f64": 0 (number)
stack:
- scope (wasm-expression-stack):
at call_func (0:58):
- scope (global):
globals: "global0": 0 (number)
- scope (local):
locals: "var0": 4 (number), "var1": 7.199999809265137 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -36,12 +38,15 @@ at func (0:71):
- scope (local):
locals: "0": 0 (number), "i32Arg": 4 (number), "var1": 0 (number), "i64_local": 0 (number), "unicode☼f64": 0 (number)
stack: "0": 11 (number)
- scope (wasm-expression-stack):
0: 11 (number)
at call_func (0:58):
- scope (global):
globals: "global0": 0 (number)
- scope (local):
locals: "var0": 4 (number), "var1": 7.199999809265137 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -55,12 +60,14 @@ at func (0:73):
- scope (local):
locals: "0": 0 (number), "i32Arg": 11 (number), "var1": 0 (number), "i64_local": 0 (number), "unicode☼f64": 0 (number)
stack:
- scope (wasm-expression-stack):
at call_func (0:58):
- scope (global):
globals: "global0": 0 (number)
- scope (local):
locals: "var0": 4 (number), "var1": 7.199999809265137 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -74,12 +81,15 @@ at func (0:75):
- scope (local):
locals: "0": 0 (number), "i32Arg": 11 (number), "var1": 0 (number), "i64_local": 0 (number), "unicode☼f64": 0 (number)
stack: "0": 47 (number)
- scope (wasm-expression-stack):
0: 47 (number)
at call_func (0:58):
- scope (global):
globals: "global0": 0 (number)
- scope (local):
locals: "var0": 4 (number), "var1": 7.199999809265137 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -93,12 +103,14 @@ at func (0:77):
- scope (local):
locals: "0": 0 (number), "i32Arg": 11 (number), "var1": 47 (number), "i64_local": 0 (number), "unicode☼f64": 0 (number)
stack:
- scope (wasm-expression-stack):
at call_func (0:58):
- scope (global):
globals: "global0": 0 (number)
- scope (local):
locals: "var0": 4 (number), "var1": 7.199999809265137 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -112,12 +124,15 @@ at func (0:88):
- scope (local):
locals: "0": 0 (number), "i32Arg": 11 (number), "var1": 47 (number), "i64_local": 0 (number), "unicode☼f64": 0 (number)
stack: "0": 9223372036854775807 (string)
- scope (wasm-expression-stack):
0: 9223372036854775807 (string)
at call_func (0:58):
- scope (global):
globals: "global0": 0 (number)
- scope (local):
locals: "var0": 4 (number), "var1": 7.199999809265137 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -131,12 +146,14 @@ at func (0:90):
- scope (local):
locals: "0": 0 (number), "i32Arg": 11 (number), "var1": 47 (number), "i64_local": 9223372036854775807 (string), "unicode☼f64": 0 (number)
stack:
- scope (wasm-expression-stack):
at call_func (0:58):
- scope (global):
globals: "global0": 0 (number)
- scope (local):
locals: "var0": 4 (number), "var1": 7.199999809265137 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -150,12 +167,15 @@ at func (0:101):
- scope (local):
locals: "0": 0 (number), "i32Arg": 11 (number), "var1": 47 (number), "i64_local": 9223372036854775807 (string), "unicode☼f64": 0 (number)
stack: "0": -9223372036854775808 (string)
- scope (wasm-expression-stack):
0: -9223372036854775808 (string)
at call_func (0:58):
- scope (global):
globals: "global0": 0 (number)
- scope (local):
locals: "var0": 4 (number), "var1": 7.199999809265137 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -169,12 +189,14 @@ at func (0:103):
- scope (local):
locals: "0": 0 (number), "i32Arg": 11 (number), "var1": 47 (number), "i64_local": -9223372036854775808 (string), "unicode☼f64": 0 (number)
stack:
- scope (wasm-expression-stack):
at call_func (0:58):
- scope (global):
globals: "global0": 0 (number)
- scope (local):
locals: "var0": 4 (number), "var1": 7.199999809265137 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -188,12 +210,15 @@ at func (0:105):
- scope (local):
locals: "0": 0 (number), "i32Arg": 11 (number), "var1": 47 (number), "i64_local": -9223372036854775808 (string), "unicode☼f64": 0 (number)
stack: "0": 1 (number)
- scope (wasm-expression-stack):
0: 1 (number)
at call_func (0:58):
- scope (global):
globals: "global0": 0 (number)
- scope (local):
locals: "var0": 4 (number), "var1": 7.199999809265137 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -207,12 +232,15 @@ at func (0:106):
- scope (local):
locals: "0": 0 (number), "i32Arg": 11 (number), "var1": 47 (number), "i64_local": -9223372036854775808 (string), "unicode☼f64": 0 (number)
stack: "0": 1 (number)
- scope (wasm-expression-stack):
0: 1 (number)
at call_func (0:58):
- scope (global):
globals: "global0": 0 (number)
- scope (local):
locals: "var0": 4 (number), "var1": 7.199999809265137 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -226,12 +254,16 @@ at func (0:108):
- scope (local):
locals: "0": 0 (number), "i32Arg": 11 (number), "var1": 47 (number), "i64_local": -9223372036854775808 (string), "unicode☼f64": 0 (number)
stack: "0": 1 (number), "1": 7 (number)
- scope (wasm-expression-stack):
0: 7 (number)
1: 1 (number)
at call_func (0:58):
- scope (global):
globals: "global0": 0 (number)
- scope (local):
locals: "var0": 4 (number), "var1": 7.199999809265137 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -245,12 +277,16 @@ at func (0:109):
- scope (local):
locals: "0": 0 (number), "i32Arg": 11 (number), "var1": 47 (number), "i64_local": -9223372036854775808 (string), "unicode☼f64": 0 (number)
stack: "0": 1 (number), "1": 7 (number)
- scope (wasm-expression-stack):
0: 7 (number)
1: 1 (number)
at call_func (0:58):
- scope (global):
globals: "global0": 0 (number)
- scope (local):
locals: "var0": 4 (number), "var1": 7.199999809265137 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -264,12 +300,15 @@ at func (0:110):
- scope (local):
locals: "0": 0 (number), "i32Arg": 11 (number), "var1": 47 (number), "i64_local": -9223372036854775808 (string), "unicode☼f64": 0 (number)
stack: "0": 0.14285714285714285 (number)
- scope (wasm-expression-stack):
0: 0.14285714285714285 (number)
at call_func (0:58):
- scope (global):
globals: "global0": 0 (number)
- scope (local):
locals: "var0": 4 (number), "var1": 7.199999809265137 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -283,12 +322,14 @@ at func (0:112):
- scope (local):
locals: "0": 0 (number), "i32Arg": 11 (number), "var1": 47 (number), "i64_local": -9223372036854775808 (string), "unicode☼f64": 0.14285714285714285 (number)
stack:
- scope (wasm-expression-stack):
at call_func (0:58):
- scope (global):
globals: "global0": 0 (number)
- scope (local):
locals: "var0": 4 (number), "var1": 7.199999809265137 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -302,12 +343,15 @@ at func (0:114):
- scope (local):
locals: "0": 0 (number), "i32Arg": 11 (number), "var1": 47 (number), "i64_local": -9223372036854775808 (string), "unicode☼f64": 0.14285714285714285 (number)
stack: "0": 15 (number)
- scope (wasm-expression-stack):
0: 15 (number)
at call_func (0:58):
- scope (global):
globals: "global0": 0 (number)
- scope (local):
locals: "var0": 4 (number), "var1": 7.199999809265137 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -321,12 +365,14 @@ at func (0:116):
- scope (local):
locals: "0": 0 (number), "i32Arg": 11 (number), "var1": 47 (number), "i64_local": -9223372036854775808 (string), "unicode☼f64": 0.14285714285714285 (number)
stack:
- scope (wasm-expression-stack):
at call_func (0:58):
- scope (global):
globals: "global0": 15 (number)
- scope (local):
locals: "var0": 4 (number), "var1": 7.199999809265137 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -340,6 +386,7 @@ at call_func (0:60):
- scope (local):
locals: "var0": 4 (number), "var1": 7.199999809265137 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......
......@@ -18,18 +18,23 @@ at C (interpreted) (0:85):
- scope (local):
locals: "i32_arg": 42 (number), "i32_local": 0 (number)
stack:
- scope (wasm-expression-stack):
at B (liftoff) (0:76):
- scope (global):
globals: "global0": 0 (number)
- scope (local):
locals: "0": 0 (number), "i32_arg": 42 (number), "i32_local": 0 (number), "f32_local": 7.199999809265137 (number), "var5": 0 (number)
stack: "0": 42 (number), "1": 3 (number)
- scope (wasm-expression-stack):
0: 3 (number)
1: 42 (number)
at A (liftoff) (0:54):
- scope (global):
globals: "global0": 0 (number)
- scope (local):
locals: "var0": 42 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -43,18 +48,24 @@ at C (interpreted) (0:87):
- scope (local):
locals: "i32_arg": 42 (number), "i32_local": 0 (number)
stack: "0": 42 (number)
- scope (wasm-expression-stack):
0: 42 (number)
at B (liftoff) (0:76):
- scope (global):
globals: "global0": 0 (number)
- scope (local):
locals: "0": 0 (number), "i32_arg": 42 (number), "i32_local": 0 (number), "f32_local": 7.199999809265137 (number), "var5": 0 (number)
stack: "0": 42 (number), "1": 3 (number)
- scope (wasm-expression-stack):
0: 3 (number)
1: 42 (number)
at A (liftoff) (0:54):
- scope (global):
globals: "global0": 0 (number)
- scope (local):
locals: "var0": 42 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -68,18 +79,23 @@ at C (interpreted) (0:89):
- scope (local):
locals: "i32_arg": 42 (number), "i32_local": 0 (number)
stack:
- scope (wasm-expression-stack):
at B (liftoff) (0:76):
- scope (global):
globals: "global0": 42 (number)
- scope (local):
locals: "0": 0 (number), "i32_arg": 42 (number), "i32_local": 0 (number), "f32_local": 7.199999809265137 (number), "var5": 0 (number)
stack: "0": 42 (number), "1": 3 (number)
- scope (wasm-expression-stack):
0: 3 (number)
1: 42 (number)
at A (liftoff) (0:54):
- scope (global):
globals: "global0": 42 (number)
- scope (local):
locals: "var0": 42 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -93,18 +109,24 @@ at C (interpreted) (0:91):
- scope (local):
locals: "i32_arg": 42 (number), "i32_local": 0 (number)
stack: "0": 47 (number)
- scope (wasm-expression-stack):
0: 47 (number)
at B (liftoff) (0:76):
- scope (global):
globals: "global0": 42 (number)
- scope (local):
locals: "0": 0 (number), "i32_arg": 42 (number), "i32_local": 0 (number), "f32_local": 7.199999809265137 (number), "var5": 0 (number)
stack: "0": 42 (number), "1": 3 (number)
- scope (wasm-expression-stack):
0: 3 (number)
1: 42 (number)
at A (liftoff) (0:54):
- scope (global):
globals: "global0": 42 (number)
- scope (local):
locals: "var0": 42 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......@@ -118,18 +140,23 @@ at C (interpreted) (0:93):
- scope (local):
locals: "i32_arg": 42 (number), "i32_local": 47 (number)
stack:
- scope (wasm-expression-stack):
at B (liftoff) (0:76):
- scope (global):
globals: "global0": 42 (number)
- scope (local):
locals: "0": 0 (number), "i32_arg": 42 (number), "i32_local": 0 (number), "f32_local": 7.199999809265137 (number), "var5": 0 (number)
stack: "0": 42 (number), "1": 3 (number)
- scope (wasm-expression-stack):
0: 3 (number)
1: 42 (number)
at A (liftoff) (0:54):
- scope (global):
globals: "global0": 42 (number)
- scope (local):
locals: "var0": 42 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
- scope (global):
-- skipped globals
......
......@@ -145,17 +145,15 @@ async function waitForWasmScripts() {
}
async function getScopeValues(value) {
if (value.type != 'object') {
InspectorTest.log('Expected object. Found:');
InspectorTest.logObject(value);
return;
}
if (value.type == 'object') {
let msg = await Protocol.Runtime.getProperties({objectId: value.objectId});
printIfFailure(msg);
let printProperty = elem => '"' + elem.name + '"' +
': ' + elem.value.value + ' (' + elem.value.type + ')';
const printProperty = function(elem) {
return `"${elem.name}": ${elem.value.value} (${elem.value.type})`;
}
return msg.result.result.map(printProperty).join(', ');
}
return value.value + ' (' + value.type + ')';
}
async function dumpScopeProperties(message) {
......
......@@ -145,17 +145,15 @@ async function waitForWasmScripts() {
}
async function getScopeValues(value) {
if (value.type != 'object') {
InspectorTest.log('Expected object. Found:');
InspectorTest.logObject(value);
return;
}
if (value.type == 'object') {
let msg = await Protocol.Runtime.getProperties({objectId: value.objectId});
printIfFailure(msg);
let printProperty = elem => '"' + elem.name + '"' +
': ' + elem.value.value + ' (' + elem.value.type + ')';
const printProperty = function(elem) {
return `"${elem.name}": ${elem.value.value} (${elem.value.type})`;
}
return msg.result.result.map(printProperty).join(', ');
}
return value.value + ' (' + value.type + ')';
}
async function dumpScopeProperties(message) {
......
......@@ -10,11 +10,13 @@ at wasm_A (0:38):
- scope (global):
- scope (local):
stack:
- scope (wasm-expression-stack):
at wasm_B (0:56):
- scope (global):
- scope (local):
locals: "var0": 3 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
-- skipped
Setting breakpoint at offset 39 on script v8://test/runWasm
......@@ -33,11 +35,13 @@ at wasm_A (0:39):
- scope (global):
- scope (local):
stack:
- scope (wasm-expression-stack):
at wasm_B (0:56):
- scope (global):
- scope (local):
locals: "var0": 3 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -48,6 +52,7 @@ at wasm_B (0:45):
- scope (local):
locals: "var0": 3 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -58,6 +63,8 @@ at wasm_B (0:47):
- scope (local):
locals: "var0": 3 (number)
stack: "0": 3 (number)
- scope (wasm-expression-stack):
0: 3 (number)
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -68,6 +75,7 @@ at wasm_B (0:49):
- scope (local):
locals: "var0": 3 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -78,6 +86,8 @@ at wasm_B (0:51):
- scope (local):
locals: "var0": 3 (number)
stack: "0": 3 (number)
- scope (wasm-expression-stack):
0: 3 (number)
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -88,6 +98,9 @@ at wasm_B (0:53):
- scope (local):
locals: "var0": 3 (number)
stack: "0": 3 (number), "1": 1 (number)
- scope (wasm-expression-stack):
0: 1 (number)
1: 3 (number)
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -98,6 +111,8 @@ at wasm_B (0:54):
- scope (local):
locals: "var0": 3 (number)
stack: "0": 2 (number)
- scope (wasm-expression-stack):
0: 2 (number)
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -107,11 +122,13 @@ at wasm_A (0:38):
- scope (global):
- scope (local):
stack:
- scope (wasm-expression-stack):
at wasm_B (0:56):
- scope (global):
- scope (local):
locals: "var0": 2 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -121,11 +138,13 @@ at wasm_A (0:39):
- scope (global):
- scope (local):
stack:
- scope (wasm-expression-stack):
at wasm_B (0:56):
- scope (global):
- scope (local):
locals: "var0": 2 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -136,6 +155,7 @@ at wasm_B (0:45):
- scope (local):
locals: "var0": 2 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -146,6 +166,8 @@ at wasm_B (0:47):
- scope (local):
locals: "var0": 2 (number)
stack: "0": 2 (number)
- scope (wasm-expression-stack):
0: 2 (number)
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -156,6 +178,7 @@ at wasm_B (0:49):
- scope (local):
locals: "var0": 2 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -166,6 +189,8 @@ at wasm_B (0:51):
- scope (local):
locals: "var0": 2 (number)
stack: "0": 2 (number)
- scope (wasm-expression-stack):
0: 2 (number)
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -176,6 +201,9 @@ at wasm_B (0:53):
- scope (local):
locals: "var0": 2 (number)
stack: "0": 2 (number), "1": 1 (number)
- scope (wasm-expression-stack):
0: 1 (number)
1: 2 (number)
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -186,6 +214,8 @@ at wasm_B (0:54):
- scope (local):
locals: "var0": 2 (number)
stack: "0": 1 (number)
- scope (wasm-expression-stack):
0: 1 (number)
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -195,11 +225,13 @@ at wasm_A (0:38):
- scope (global):
- scope (local):
stack:
- scope (wasm-expression-stack):
at wasm_B (0:56):
- scope (global):
- scope (local):
locals: "var0": 1 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -209,11 +241,13 @@ at wasm_A (0:39):
- scope (global):
- scope (local):
stack:
- scope (wasm-expression-stack):
at wasm_B (0:56):
- scope (global):
- scope (local):
locals: "var0": 1 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -224,6 +258,7 @@ at wasm_B (0:45):
- scope (local):
locals: "var0": 1 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -234,6 +269,8 @@ at wasm_B (0:47):
- scope (local):
locals: "var0": 1 (number)
stack: "0": 1 (number)
- scope (wasm-expression-stack):
0: 1 (number)
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -244,6 +281,7 @@ at wasm_B (0:49):
- scope (local):
locals: "var0": 1 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -254,6 +292,8 @@ at wasm_B (0:51):
- scope (local):
locals: "var0": 1 (number)
stack: "0": 1 (number)
- scope (wasm-expression-stack):
0: 1 (number)
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -264,6 +304,9 @@ at wasm_B (0:53):
- scope (local):
locals: "var0": 1 (number)
stack: "0": 1 (number), "1": 1 (number)
- scope (wasm-expression-stack):
0: 1 (number)
1: 1 (number)
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -274,6 +317,8 @@ at wasm_B (0:54):
- scope (local):
locals: "var0": 1 (number)
stack: "0": 0 (number)
- scope (wasm-expression-stack):
0: 0 (number)
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -283,11 +328,13 @@ at wasm_A (0:38):
- scope (global):
- scope (local):
stack:
- scope (wasm-expression-stack):
at wasm_B (0:56):
- scope (global):
- scope (local):
locals: "var0": 0 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -297,11 +344,13 @@ at wasm_A (0:39):
- scope (global):
- scope (local):
stack:
- scope (wasm-expression-stack):
at wasm_B (0:56):
- scope (global):
- scope (local):
locals: "var0": 0 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -312,6 +361,7 @@ at wasm_B (0:45):
- scope (local):
locals: "var0": 0 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -322,6 +372,8 @@ at wasm_B (0:47):
- scope (local):
locals: "var0": 0 (number)
stack: "0": 0 (number)
- scope (wasm-expression-stack):
0: 0 (number)
at (anonymous) (0:17):
-- skipped
Paused:
......@@ -332,6 +384,7 @@ at wasm_B (0:61):
- scope (local):
locals: "var0": 0 (number)
stack:
- scope (wasm-expression-stack):
at (anonymous) (0:17):
-- skipped
exports.main returned!
......
......@@ -106,16 +106,14 @@ Protocol.Debugger.onPaused(async msg => {
});
async function getScopeValues(value) {
if (value.type != 'object') {
InspectorTest.log('Expected object. Found:');
InspectorTest.logObject(value);
return;
}
if (value.type == 'object') {
let msg = await Protocol.Runtime.getProperties({objectId: value.objectId});
let printProperty = elem => '"' + elem.name + '"' +
': ' + elem.value.value + ' (' + elem.value.type + ')';
const printProperty = function(elem) {
return `"${elem.name}": ${elem.value.value} (${elem.value.type})`;
}
return msg.result.result.map(printProperty).join(', ');
}
return value.value + ' (' + value.type + ')';
}
(async function test() {
......
......@@ -14,6 +14,8 @@ at wasm_B (0:60):
- scope (local):
locals: {"var0":3}
stack: {"0":1024}
- scope (wasm-expression-stack):
{"0":1024}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -25,12 +27,16 @@ at wasm_A (0:39):
- scope (local):
locals: {"var0":1024}
stack: {}
- scope (wasm-expression-stack):
{}
at wasm_B (0:60):
- scope (global):
-- skipped
- scope (local):
locals: {"var0":3}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -42,12 +48,16 @@ at wasm_A (0:40):
- scope (local):
locals: {"var0":1024}
stack: {}
- scope (wasm-expression-stack):
{}
at wasm_B (0:60):
- scope (global):
-- skipped
- scope (local):
locals: {"var0":3}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -59,6 +69,8 @@ at wasm_B (0:62):
- scope (local):
locals: {"var0":3}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -70,6 +82,8 @@ at wasm_B (0:60):
- scope (local):
locals: {"var0":2}
stack: {"0":1024}
- scope (wasm-expression-stack):
{"0":1024}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -81,6 +95,8 @@ at wasm_B (0:62):
- scope (local):
locals: {"var0":2}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -92,6 +108,8 @@ at wasm_B (0:44):
- scope (local):
locals: {"var0":2}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -103,6 +121,8 @@ at wasm_B (0:60):
- scope (local):
locals: {"var0":1}
stack: {"0":1024}
- scope (wasm-expression-stack):
{"0":1024}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -114,12 +134,16 @@ at wasm_A (0:39):
- scope (local):
locals: {"var0":1024}
stack: {}
- scope (wasm-expression-stack):
{}
at wasm_B (0:60):
- scope (global):
-- skipped
- scope (local):
locals: {"var0":1}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -131,6 +155,8 @@ at wasm_B (0:62):
- scope (local):
locals: {"var0":1}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -142,6 +168,8 @@ at wasm_B (0:44):
- scope (local):
locals: {"var0":1}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -153,6 +181,8 @@ at wasm_B (0:46):
- scope (local):
locals: {"var0":1}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -164,6 +194,8 @@ at wasm_B (0:48):
- scope (local):
locals: {"var0":1}
stack: {"0":1}
- scope (wasm-expression-stack):
{"0":1}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -175,6 +207,8 @@ at wasm_B (0:50):
- scope (local):
locals: {"var0":1}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -186,6 +220,8 @@ at wasm_B (0:52):
- scope (local):
locals: {"var0":1}
stack: {"0":1}
- scope (wasm-expression-stack):
{"0":1}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -197,6 +233,8 @@ at wasm_B (0:54):
- scope (local):
locals: {"var0":1}
stack: {"0":1,"1":1}
- scope (wasm-expression-stack):
{"0":1,"1":1}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -208,6 +246,8 @@ at wasm_B (0:55):
- scope (local):
locals: {"var0":1}
stack: {"0":0}
- scope (wasm-expression-stack):
{"0":0}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -219,6 +259,8 @@ at wasm_B (0:57):
- scope (local):
locals: {"var0":0}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -230,6 +272,8 @@ at wasm_B (0:60):
- scope (local):
locals: {"var0":0}
stack: {"0":1024}
- scope (wasm-expression-stack):
{"0":1024}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -241,12 +285,16 @@ at wasm_A (0:39):
- scope (local):
locals: {"var0":1024}
stack: {}
- scope (wasm-expression-stack):
{}
at wasm_B (0:60):
- scope (global):
-- skipped
- scope (local):
locals: {"var0":0}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -258,12 +306,16 @@ at wasm_A (0:40):
- scope (local):
locals: {"var0":1024}
stack: {}
- scope (wasm-expression-stack):
{}
at wasm_B (0:60):
- scope (global):
-- skipped
- scope (local):
locals: {"var0":0}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -275,12 +327,16 @@ at wasm_A (0:41):
- scope (local):
locals: {"var0":1024}
stack: {}
- scope (wasm-expression-stack):
{}
at wasm_B (0:60):
- scope (global):
-- skipped
- scope (local):
locals: {"var0":0}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -292,6 +348,8 @@ at wasm_B (0:62):
- scope (local):
locals: {"var0":0}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......
......@@ -113,9 +113,13 @@ async function waitForPauseAndStep(stepAction) {
functionDeclaration: 'function() { return this; }',
returnByValue: true
});
if (scope.type === 'local') {
if (value.locals)
InspectorTest.log(` locals: ${JSON.stringify(value.locals)}`);
InspectorTest.log(` stack: ${JSON.stringify(value.stack)}`);
} else {
InspectorTest.log(` ${JSON.stringify(value)}`);
}
}
}
}
......
......@@ -17,6 +17,8 @@ at wasm_B (0:54):
- scope (local):
locals: {"var0":4}
stack: {"0":3}
- scope (wasm-expression-stack):
{"0":3}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -28,6 +30,8 @@ at wasm_B (0:56):
- scope (local):
locals: {"var0":3}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -38,12 +42,16 @@ at wasm_A (0:38):
-- skipped
- scope (local):
stack: {}
- scope (wasm-expression-stack):
{}
at wasm_B (0:56):
- scope (global):
-- skipped
- scope (local):
locals: {"var0":3}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -54,12 +62,16 @@ at wasm_A (0:39):
-- skipped
- scope (local):
stack: {}
- scope (wasm-expression-stack):
{}
at wasm_B (0:56):
- scope (global):
-- skipped
- scope (local):
locals: {"var0":3}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -71,6 +83,8 @@ at wasm_B (0:58):
- scope (local):
locals: {"var0":3}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -82,6 +96,8 @@ at wasm_B (0:54):
- scope (local):
locals: {"var0":3}
stack: {"0":2}
- scope (wasm-expression-stack):
{"0":2}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -93,6 +109,8 @@ at wasm_B (0:56):
- scope (local):
locals: {"var0":2}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -104,6 +122,8 @@ at wasm_B (0:58):
- scope (local):
locals: {"var0":2}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -115,6 +135,8 @@ at wasm_B (0:54):
- scope (local):
locals: {"var0":2}
stack: {"0":1}
- scope (wasm-expression-stack):
{"0":1}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -126,6 +148,8 @@ at wasm_B (0:56):
- scope (local):
locals: {"var0":1}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -136,12 +160,16 @@ at wasm_A (0:38):
-- skipped
- scope (local):
stack: {}
- scope (wasm-expression-stack):
{}
at wasm_B (0:56):
- scope (global):
-- skipped
- scope (local):
locals: {"var0":1}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -153,6 +181,8 @@ at wasm_B (0:58):
- scope (local):
locals: {"var0":1}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -164,6 +194,8 @@ at wasm_B (0:43):
- scope (local):
locals: {"var0":1}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -175,6 +207,8 @@ at wasm_B (0:45):
- scope (local):
locals: {"var0":1}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -186,6 +220,8 @@ at wasm_B (0:47):
- scope (local):
locals: {"var0":1}
stack: {"0":1}
- scope (wasm-expression-stack):
{"0":1}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -197,6 +233,8 @@ at wasm_B (0:49):
- scope (local):
locals: {"var0":1}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -208,6 +246,8 @@ at wasm_B (0:51):
- scope (local):
locals: {"var0":1}
stack: {"0":1}
- scope (wasm-expression-stack):
{"0":1}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -219,6 +259,8 @@ at wasm_B (0:53):
- scope (local):
locals: {"var0":1}
stack: {"0":1,"1":1}
- scope (wasm-expression-stack):
{"0":1,"1":1}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -230,6 +272,8 @@ at wasm_B (0:54):
- scope (local):
locals: {"var0":1}
stack: {"0":0}
- scope (wasm-expression-stack):
{"0":0}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -241,6 +285,8 @@ at wasm_B (0:56):
- scope (local):
locals: {"var0":0}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -251,12 +297,16 @@ at wasm_A (0:38):
-- skipped
- scope (local):
stack: {}
- scope (wasm-expression-stack):
{}
at wasm_B (0:56):
- scope (global):
-- skipped
- scope (local):
locals: {"var0":0}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -267,12 +317,16 @@ at wasm_A (0:39):
-- skipped
- scope (local):
stack: {}
- scope (wasm-expression-stack):
{}
at wasm_B (0:56):
- scope (global):
-- skipped
- scope (local):
locals: {"var0":0}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -283,12 +337,16 @@ at wasm_A (0:40):
-- skipped
- scope (local):
stack: {}
- scope (wasm-expression-stack):
{}
at wasm_B (0:56):
- scope (global):
-- skipped
- scope (local):
locals: {"var0":0}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......@@ -300,6 +358,8 @@ at wasm_B (0:58):
- scope (local):
locals: {"var0":0}
stack: {}
- scope (wasm-expression-stack):
{}
at (anonymous) (0:17):
- scope (global):
-- skipped
......
......@@ -111,9 +111,14 @@ async function waitForPauseAndStep(stepAction) {
functionDeclaration: 'function() { return this; }',
returnByValue: true
});
if (scope.type === 'local') {
if (value.locals)
InspectorTest.log(` locals: ${JSON.stringify(value.locals)}`);
InspectorTest.log(` stack: ${JSON.stringify(value.stack)}`);
} else {
InspectorTest.log(` ${JSON.stringify(value)}`);
}
}
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment