Fix attaching debugger (#3139)

* Fix attaching debugger
* Fix deadlock on attach

Co-authored-by: wargio <wargio@libero.it>
This commit is contained in:
Anton Kochkov 2023-02-22 23:09:24 +08:00
parent ef0d69b53a
commit c0f260ca69

View File

@ -2075,8 +2075,11 @@ void CutterCore::attachDebug(int pid)
offsetPriorDebugging = getOffset(); offsetPriorDebugging = getOffset();
} }
CORE_LOCK(); if (!asyncTask(
setConfig("cfg.debug", true); [&](RzCore *core) {
// cannot use setConfig because core is
// already locked, which causes a deadlock
rz_config_set_b(core->config, "cfg.debug", true);
auto uri = rz_str_newf("dbg://%d", pid); auto uri = rz_str_newf("dbg://%d", pid);
if (currentlyOpenFile.isEmpty()) { if (currentlyOpenFile.isEmpty()) {
rz_core_file_open_load(core, uri, 0, RZ_PERM_R, false); rz_core_file_open_load(core, uri, 0, RZ_PERM_R, false);
@ -2084,7 +2087,11 @@ void CutterCore::attachDebug(int pid)
rz_core_file_reopen_remote_debug(core, uri, 0); rz_core_file_reopen_remote_debug(core, uri, 0);
} }
free(uri); free(uri);
return nullptr;
},
debugTask)) {
return;
}
emit debugTaskStateChanged(); emit debugTaskStateChanged();
connect(debugTask.data(), &RizinTask::finished, this, [this, pid]() { connect(debugTask.data(), &RizinTask::finished, this, [this, pid]() {
@ -2144,7 +2151,10 @@ void CutterCore::stopDebug()
rz_core_analysis_esil_trace_stop(core); rz_core_analysis_esil_trace_stop(core);
currentlyEmulating = false; currentlyEmulating = false;
} else { } else {
// ensure we have opened a file.
if (core->io->desc) {
rz_core_debug_process_close(core); rz_core_debug_process_close(core);
}
currentlyAttachedToPID = -1; currentlyAttachedToPID = -1;
} }