[vm/bytecode] Various fixes for debugging bytecode.
- Revert previously added adjustment of context level when copying overlapping context variable from parent to closure. - Distinguish between Code and Bytecode in activation frames when building the asynchronous causal stack trace. - Remove extra space when printing local variable descriptors. Change-Id: I0e9371afafacedb59dd2e2f3abd4c38db0151cc2 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107196 Commit-Queue: Régis Crelier <regis@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
This commit is contained in:
committed by
commit-bot@chromium.org
parent
3e732e5bbe
commit
11d369fd58
@@ -394,7 +394,7 @@ void KernelBytecodeDisassembler::Disassemble(const Function& function) {
|
||||
function_fullname);
|
||||
const auto& var_descriptors =
|
||||
LocalVarDescriptors::Handle(zone, bytecode.GetLocalVarDescriptors());
|
||||
THR_Print("%s\n}\n", var_descriptors.ToCString());
|
||||
THR_Print("%s}\n", var_descriptors.ToCString());
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
@@ -3070,7 +3070,6 @@ RawLocalVarDescriptors* BytecodeReader::ComputeLocalVarDescriptors(
|
||||
function.token_pos() <= var_info.end_pos) ||
|
||||
(function.token_pos() <= var_info.begin_pos &&
|
||||
var_info.begin_pos <= function.end_token_pos()))) {
|
||||
var_info.scope_id++; // One level higher in the context chain.
|
||||
vars.Add(
|
||||
VarDesc{&String::Handle(zone, parent_vars.GetName(i)), var_info});
|
||||
}
|
||||
|
||||
+17
-9
@@ -2321,6 +2321,7 @@ DebuggerStackTrace* Debugger::CollectAwaiterReturnStackTrace() {
|
||||
Thread::Current(),
|
||||
StackFrameIterator::kNoCrossThreadIteration);
|
||||
|
||||
Object& code_object = Object::Handle(zone);
|
||||
Code& code = Code::Handle(zone);
|
||||
Bytecode& bytecode = Bytecode::Handle(zone);
|
||||
Smi& offset = Smi::Handle(zone);
|
||||
@@ -2518,17 +2519,24 @@ DebuggerStackTrace* Debugger::CollectAwaiterReturnStackTrace() {
|
||||
// the readability of the trace.
|
||||
i++;
|
||||
} else {
|
||||
code = Code::RawCast(async_stack_trace.CodeAtFrame(i));
|
||||
code_object = async_stack_trace.CodeAtFrame(i);
|
||||
offset = Smi::RawCast(async_stack_trace.PcOffsetAtFrame(i));
|
||||
uword pc = code.PayloadStart() + offset.Value();
|
||||
if (code.is_optimized()) {
|
||||
for (InlinedFunctionsIterator it(code, pc); !it.Done();
|
||||
it.Advance()) {
|
||||
inlined_code = it.code();
|
||||
stack_trace->AddAsyncCausalFrame(it.pc(), inlined_code);
|
||||
}
|
||||
if (code_object.IsBytecode()) {
|
||||
bytecode ^= code_object.raw();
|
||||
uword pc = bytecode.PayloadStart() + offset.Value();
|
||||
stack_trace->AddAsyncCausalFrame(pc, bytecode);
|
||||
} else {
|
||||
stack_trace->AddAsyncCausalFrame(pc, code);
|
||||
code ^= code_object.raw();
|
||||
uword pc = code.PayloadStart() + offset.Value();
|
||||
if (code.is_optimized()) {
|
||||
for (InlinedFunctionsIterator it(code, pc); !it.Done();
|
||||
it.Advance()) {
|
||||
inlined_code = it.code();
|
||||
stack_trace->AddAsyncCausalFrame(it.pc(), inlined_code);
|
||||
}
|
||||
} else {
|
||||
stack_trace->AddAsyncCausalFrame(pc, code);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user