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 committed by GitHub
parent c68598757d
commit 68ec5a3da1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2075,16 +2075,23 @@ void CutterCore::attachDebug(int pid)
offsetPriorDebugging = getOffset();
}
CORE_LOCK();
setConfig("cfg.debug", true);
auto uri = rz_str_newf("dbg://%d", pid);
if (currentlyOpenFile.isEmpty()) {
rz_core_file_open_load(core, uri, 0, RZ_PERM_R, false);
} else {
rz_core_file_reopen_remote_debug(core, uri, 0);
if (!asyncTask(
[&](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);
if (currentlyOpenFile.isEmpty()) {
rz_core_file_open_load(core, uri, 0, RZ_PERM_R, false);
} else {
rz_core_file_reopen_remote_debug(core, uri, 0);
}
free(uri);
return nullptr;
},
debugTask)) {
return;
}
free(uri);
emit debugTaskStateChanged();
connect(debugTask.data(), &RizinTask::finished, this, [this, pid]() {
@ -2144,7 +2151,10 @@ void CutterCore::stopDebug()
rz_core_analysis_esil_trace_stop(core);
currentlyEmulating = false;
} else {
rz_core_debug_process_close(core);
// ensure we have opened a file.
if (core->io->desc) {
rz_core_debug_process_close(core);
}
currentlyAttachedToPID = -1;
}
@ -4579,4 +4589,4 @@ void CutterCore::writeGraphvizGraphToFile(QString path, QString format, RzCoreGr
qWarning() << "Cannot get graph at " << RzAddressString(address);
}
}
}
}