MCPcopy Create free account
hub / github.com/X-Profiler/xprofiler / SetJavaScriptStack

Method SetJavaScriptStack

src/commands/report/javascript_stack.cc:21–98  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

19using v8::StackTrace;
20
21void NodeReport::SetJavaScriptStack(JSONWriter* writer, bool fatal_error) {
22 if (isolate_ == nullptr) {
23 return;
24 }
25 HandleScope scope(isolate_);
26 RegisterState state;
27 SampleInfo info;
28
29 // init state
30 state.pc = nullptr;
31 state.fp = &state;
32 state.sp = &state;
33
34 // instruction pointer
35 void* samples[kMaxFramesCount];
36
37 // get instruction pointer
38 isolate_->GetStackSample(state, samples, kMaxFramesCount, &info);
39
40 // set current vm state
41 if (static_cast<size_t>(info.vm_state) < arraysize(v8_states)) {
42 writer->json_keyvalue("vmState", v8_states[info.vm_state]);
43 } else {
44 writer->json_keyvalue("vmState", "unknown");
45 }
46
47 if (fatal_error) {
48 writer->json_arraystart("jsStacks");
49 writer->json_arrayend();
50 return;
51 }
52
53 // get js stacks
54 Local<StackTrace> stack = StackTrace::CurrentStackTrace(
55 isolate_, kMaxFramesCount, StackTrace::kDetailed);
56 writer->json_arraystart("jsStacks");
57 for (int i = 0; i < stack->GetFrameCount(); i++) {
58 writer->json_start();
59
60 if (static_cast<size_t>(i) < info.frames_count)
61 writer->json_keyvalue("pcAddress", GetPcAddress(samples[i]));
62 else
63 writer->json_keyvalue("pcAddress", "nullptr");
64
65 // needs v8 version >= 6.8
66 Local<StackFrame> frame = stack->GetFrame(isolate_, i);
67
68 Utf8String fn_name_s(frame->GetFunctionName());
69 Utf8String script_name(frame->GetScriptName());
70 const int line_number = frame->GetLineNumber();
71 const int column = frame->GetColumn();
72
73 if (fn_name_s.length() == 0)
74 writer->json_keyvalue("functionName", "anonymous");
75 else
76 writer->json_keyvalue("functionName", *fn_name_s);
77 writer->json_keyvalue("scriptName", *script_name);
78 writer->json_keyvalue("lineNumber", line_number);

Callers

nothing calls this directly

Calls 7

json_keyvalueMethod · 0.80
json_arraystartMethod · 0.80
json_arrayendMethod · 0.80
json_startMethod · 0.80
json_endMethod · 0.80
arraysizeFunction · 0.50
GetPcAddressFunction · 0.50

Tested by

no test coverage detected