Index: src/inspector/v8-stack-trace-impl.cc |
diff --git a/src/inspector/v8-stack-trace-impl.cc b/src/inspector/v8-stack-trace-impl.cc |
index 340024fbf525e8e8c6f9fe6b291193e54cd1082d..17797ff6f51cff964e40837f19cc8872e7fdda38 100644 |
--- a/src/inspector/v8-stack-trace-impl.cc |
+++ b/src/inspector/v8-stack-trace-impl.cc |
@@ -5,6 +5,7 @@ |
#include "src/inspector/v8-stack-trace-impl.h" |
#include "src/inspector/string-util.h" |
+#include "src/inspector/v8-debugger-agent-impl.h" |
#include "src/inspector/v8-debugger.h" |
#include "src/inspector/v8-inspector-impl.h" |
@@ -21,7 +22,9 @@ static const v8::StackTrace::StackTraceOptions stackTraceOptions = |
v8::StackTrace::kScriptId | v8::StackTrace::kScriptNameOrSourceURL | |
v8::StackTrace::kFunctionName); |
-V8StackTraceImpl::Frame toFrame(v8::Local<v8::StackFrame> frame) { |
+V8StackTraceImpl::Frame toFrame(v8::Local<v8::StackFrame> frame, |
+ WasmTranslation* wasmTranslation, |
+ int contextGroupId) { |
String16 scriptId = String16::fromInteger(frame->GetScriptId()); |
String16 sourceName; |
v8::Local<v8::String> sourceNameValue(frame->GetScriptNameOrSourceURL()); |
@@ -33,22 +36,30 @@ V8StackTraceImpl::Frame toFrame(v8::Local<v8::StackFrame> frame) { |
if (!functionNameValue.IsEmpty()) |
functionName = toProtocolString(functionNameValue); |
- int sourceLineNumber = frame->GetLineNumber(); |
- int sourceColumn = frame->GetColumn(); |
+ int sourceLineNumber = frame->GetLineNumber() - 1; |
+ int sourceColumn = frame->GetColumn() - 1; |
+ // TODO(clemensh): Figure out a way to do this translation only right before |
+ // sending the stack trace over wire. |
+ if (wasmTranslation) |
+ wasmTranslation->TranslateWasmScriptLocationToProtocolLocation( |
+ &scriptId, &sourceLineNumber, &sourceColumn, contextGroupId); |
return V8StackTraceImpl::Frame(functionName, scriptId, sourceName, |
- sourceLineNumber, sourceColumn); |
+ sourceLineNumber + 1, sourceColumn + 1); |
} |
void toFramesVector(v8::Local<v8::StackTrace> stackTrace, |
std::vector<V8StackTraceImpl::Frame>& frames, |
- size_t maxStackSize, v8::Isolate* isolate) { |
+ size_t maxStackSize, v8::Isolate* isolate, |
+ V8Debugger* debugger, int contextGroupId) { |
DCHECK(isolate->InContext()); |
int frameCount = stackTrace->GetFrameCount(); |
if (frameCount > static_cast<int>(maxStackSize)) |
frameCount = static_cast<int>(maxStackSize); |
+ WasmTranslation* wasmTranslation = |
+ debugger ? debugger->wasmTranslation() : nullptr; |
for (int i = 0; i < frameCount; i++) { |
v8::Local<v8::StackFrame> stackFrame = stackTrace->GetFrame(i); |
- frames.push_back(toFrame(stackFrame)); |
+ frames.push_back(toFrame(stackFrame, wasmTranslation, contextGroupId)); |
} |
} |
@@ -111,7 +122,8 @@ std::unique_ptr<V8StackTraceImpl> V8StackTraceImpl::create( |
v8::HandleScope scope(isolate); |
std::vector<V8StackTraceImpl::Frame> frames; |
if (!stackTrace.IsEmpty()) |
- toFramesVector(stackTrace, frames, maxStackSize, isolate); |
+ toFramesVector(stackTrace, frames, maxStackSize, isolate, debugger, |
+ contextGroupId); |
int maxAsyncCallChainDepth = 1; |
V8StackTraceImpl* asyncCallChain = nullptr; |