mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-27 23:51:56 +00:00
Revert "[lldb-vscode] Send Statistics Dump in terminated event"
This reverts commit c8a26f8c6d
.
Returning full statistics result in "terminated" (DAP) event could result in delay in the UI when debugging from VSCode.
If the program run to exit and debug session terminates. The DAP event order will be: exited event --> terminateCommands --> terminated event --> disconnect request --> disconnect response.
The debugging UI in VSCode corresponds to "disconnect" request/response. If the terminated event is taking long to process, the IDE won't quit debugging UI until it's done.
For big binary (tested example has 29 GB of debug info), it can cause ~15s delay in terminated event itself. And the UI could take ~20s to reflect.
This may cause confusion in debug sessions. We should persuit a more lightweight return or other solution to return such info.
This commit is contained in:
parent
ada9ab6107
commit
7bbd0fba98
@ -369,13 +369,7 @@ class DebugCommunication(object):
|
||||
def wait_for_exited(self):
|
||||
event_dict = self.wait_for_event('exited')
|
||||
if event_dict is None:
|
||||
raise ValueError("didn't get exited event")
|
||||
return event_dict
|
||||
|
||||
def wait_for_terminated(self):
|
||||
event_dict = self.wait_for_event('terminated')
|
||||
if event_dict is None:
|
||||
raise ValueError("didn't get terminated event")
|
||||
raise ValueError("didn't get stopped event")
|
||||
return event_dict
|
||||
|
||||
def get_initialize_value(self, key):
|
||||
|
@ -1,17 +0,0 @@
|
||||
DYLIB_NAME := foo
|
||||
DYLIB_CXX_SOURCES := foo.cpp
|
||||
CXX_SOURCES := main.cpp
|
||||
|
||||
LD_EXTRAS := -Wl,-rpath "-Wl,$(shell pwd)"
|
||||
USE_LIBDL :=1
|
||||
|
||||
include Makefile.rules
|
||||
|
||||
all: a.out.stripped
|
||||
|
||||
a.out.stripped:
|
||||
strip -o a.out.stripped a.out
|
||||
|
||||
ifneq "$(CODESIGN)" ""
|
||||
$(CODESIGN) -fs - a.out.stripped
|
||||
endif
|
@ -1,60 +0,0 @@
|
||||
"""
|
||||
Test lldb-vscode terminated event
|
||||
"""
|
||||
|
||||
import vscode
|
||||
from lldbsuite.test.decorators import *
|
||||
from lldbsuite.test.lldbtest import *
|
||||
from lldbsuite.test import lldbutil
|
||||
import lldbvscode_testcase
|
||||
import re
|
||||
import json
|
||||
|
||||
class TestVSCode_terminatedEvent(lldbvscode_testcase.VSCodeTestCaseBase):
|
||||
|
||||
@skipIfWindows
|
||||
@skipIfRemote
|
||||
def test_terminated_event(self):
|
||||
'''
|
||||
Terminated Event
|
||||
Now contains the statistics of a debug session:
|
||||
metatdata:
|
||||
totalDebugInfoByteSize > 0
|
||||
totalDebugInfoEnabled > 0
|
||||
totalModuleCountHasDebugInfo > 0
|
||||
...
|
||||
targetInfo:
|
||||
totalBreakpointResolveTime > 0
|
||||
breakpoints:
|
||||
recognize function breakpoint
|
||||
recognize source line breakpoint
|
||||
It should contains the breakpoints info: function bp & source line bp
|
||||
'''
|
||||
|
||||
program_basename = "a.out.stripped"
|
||||
program = self.getBuildArtifact(program_basename)
|
||||
self.build_and_launch(program)
|
||||
# Set breakpoints
|
||||
functions = ['foo']
|
||||
breakpoint_ids = self.set_function_breakpoints(functions)
|
||||
self.assertEquals(len(breakpoint_ids), len(functions), 'expect one breakpoint')
|
||||
main_bp_line = line_number('main.cpp', '// main breakpoint 1')
|
||||
breakpoint_ids.append(self.set_source_breakpoints('main.cpp', [main_bp_line]))
|
||||
|
||||
self.continue_to_breakpoints(breakpoint_ids)
|
||||
self.continue_to_exit()
|
||||
|
||||
statistics = json.loads(self.vscode.wait_for_terminated()['statistics'])
|
||||
self.assertTrue(statistics['totalDebugInfoByteSize'] > 0)
|
||||
self.assertTrue(statistics['totalDebugInfoEnabled'] > 0)
|
||||
self.assertTrue(statistics['totalModuleCountHasDebugInfo'] > 0)
|
||||
|
||||
# lldb-vscode debugs one target at a time
|
||||
self.assertTrue(statistics['targets'][0]['totalBreakpointResolveTime'] > 0)
|
||||
|
||||
breakpoints = statistics['targets'][0]['breakpoints']
|
||||
self.assertIn('foo',
|
||||
breakpoints[0]['details']['Breakpoint']['BKPTResolver']['Options']['SymbolNames'],
|
||||
'foo is a symbol breakpoint')
|
||||
self.assertTrue(breakpoints[1]['details']['Breakpoint']['BKPTResolver']['Options']['FileName'].endswith('main.cpp'),
|
||||
'target has source line breakpoint in main.cpp')
|
@ -1,3 +0,0 @@
|
||||
int foo() {
|
||||
return 12;
|
||||
}
|
@ -1 +0,0 @@
|
||||
int foo();
|
@ -1,8 +0,0 @@
|
||||
#include <iostream>
|
||||
#include "foo.h"
|
||||
|
||||
int main(int argc, char const *argv[]) {
|
||||
std::cout << "Hello World!" << std::endl; // main breakpoint 1
|
||||
foo();
|
||||
return 0;
|
||||
}
|
@ -19,7 +19,6 @@
|
||||
#include "lldb/API/SBBreakpoint.h"
|
||||
#include "lldb/API/SBBreakpointLocation.h"
|
||||
#include "lldb/API/SBDeclaration.h"
|
||||
#include "lldb/API/SBStructuredData.h"
|
||||
#include "lldb/API/SBValue.h"
|
||||
#include "lldb/Host/PosixApi.h"
|
||||
|
||||
@ -1140,21 +1139,6 @@ CreateRunInTerminalReverseRequest(const llvm::json::Object &launch_request,
|
||||
return reverse_request;
|
||||
}
|
||||
|
||||
llvm::json::Object CreateTerminatedEventObject() {
|
||||
llvm::json::Object event(CreateEventObject("terminated"));
|
||||
lldb::SBStructuredData statistics = g_vsc.target.GetStatistics();
|
||||
bool is_dictionary =
|
||||
statistics.GetType() == lldb::eStructuredDataTypeDictionary;
|
||||
if (!is_dictionary) {
|
||||
return event;
|
||||
}
|
||||
|
||||
lldb::SBStream stats_stream;
|
||||
statistics.GetAsJSON(stats_stream);
|
||||
event.try_emplace("statistics", llvm::json::fixUTF8(stats_stream.GetData()));
|
||||
return event;
|
||||
}
|
||||
|
||||
std::string JSONToString(const llvm::json::Value &json) {
|
||||
std::string data;
|
||||
llvm::raw_string_ostream os(data);
|
||||
|
@ -485,12 +485,6 @@ CreateRunInTerminalReverseRequest(const llvm::json::Object &launch_request,
|
||||
llvm::StringRef debug_adaptor_path,
|
||||
llvm::StringRef comm_file);
|
||||
|
||||
/// Create a "Terminated" JSON object that contains statistics
|
||||
///
|
||||
/// \return
|
||||
/// A body JSON object with debug info and breakpoint info
|
||||
llvm::json::Object CreateTerminatedEventObject();
|
||||
|
||||
/// Convert a given JSON object to a string.
|
||||
std::string JSONToString(const llvm::json::Value &json);
|
||||
|
||||
|
@ -204,7 +204,7 @@ void SendTerminatedEvent() {
|
||||
g_vsc.sent_terminated_event = true;
|
||||
g_vsc.RunTerminateCommands();
|
||||
// Send a "terminated" event
|
||||
llvm::json::Object event(CreateTerminatedEventObject());
|
||||
llvm::json::Object event(CreateEventObject("terminated"));
|
||||
g_vsc.SendJSON(llvm::json::Value(std::move(event)));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user