mirror of
https://github.com/godotengine/godot.git
synced 2025-11-01 22:21:18 +00:00
Fix DAP bugs: crash when removing breakpoints, duplicated breakpoint data, source checksums not updating
This commit is contained in:
parent
e585e6a3eb
commit
0272e35451
4 changed files with 99 additions and 54 deletions
|
|
@ -322,8 +322,7 @@ Dictionary DebugAdapterParser::req_stackTrace(const Dictionary &p_params) const
|
|||
|
||||
Array arr;
|
||||
DebugAdapterProtocol *dap = DebugAdapterProtocol::get_singleton();
|
||||
for (const KeyValue<DAP::StackFrame, List<int>> &E : dap->stackframe_list) {
|
||||
DAP::StackFrame sf = E.key;
|
||||
for (DAP::StackFrame sf : dap->stackframe_list) {
|
||||
if (!lines_at_one) {
|
||||
sf.line--;
|
||||
}
|
||||
|
|
@ -369,6 +368,8 @@ Dictionary DebugAdapterParser::req_setBreakpoints(const Dictionary &p_params) co
|
|||
lines.push_back(breakpoint.line + !lines_at_one);
|
||||
}
|
||||
|
||||
// Always update the source checksum for the requested path, as it might have been modified externally.
|
||||
DebugAdapterProtocol::get_singleton()->update_source(source.path);
|
||||
Array updated_breakpoints = DebugAdapterProtocol::get_singleton()->update_breakpoints(source.path, lines);
|
||||
body["breakpoints"] = updated_breakpoints;
|
||||
|
||||
|
|
@ -399,15 +400,13 @@ Dictionary DebugAdapterParser::req_scopes(const Dictionary &p_params) const {
|
|||
int frame_id = args["frameId"];
|
||||
Array scope_list;
|
||||
|
||||
DAP::StackFrame frame;
|
||||
frame.id = frame_id;
|
||||
HashMap<DAP::StackFrame, List<int>, DAP::StackFrame>::Iterator E = DebugAdapterProtocol::get_singleton()->stackframe_list.find(frame);
|
||||
HashMap<DebugAdapterProtocol::DAPStackFrameID, Vector<int>>::Iterator E = DebugAdapterProtocol::get_singleton()->scope_list.find(frame_id);
|
||||
if (E) {
|
||||
ERR_FAIL_COND_V(E->value.size() != 3, prepare_error_response(p_params, DAP::ErrorType::UNKNOWN));
|
||||
List<int>::ConstIterator itr = E->value.begin();
|
||||
for (int i = 0; i < 3; ++itr, ++i) {
|
||||
const Vector<int> &scope_ids = E->value;
|
||||
ERR_FAIL_COND_V(scope_ids.size() != 3, prepare_error_response(p_params, DAP::ErrorType::UNKNOWN));
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
DAP::Scope scope;
|
||||
scope.variablesReference = *itr;
|
||||
scope.variablesReference = scope_ids[i];
|
||||
switch (i) {
|
||||
case 0:
|
||||
scope.name = "Locals";
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue