mirror of
https://github.com/RGBCube/serenity
synced 2025-05-14 09:24:57 +00:00
LibDebug: Add static attach() function
This function is similar to exec_and_attach(), but instead of spawning a new process and debugging it, it attaches to an existing process.
This commit is contained in:
parent
ddec9cb1f0
commit
26250fe14a
2 changed files with 21 additions and 0 deletions
|
@ -129,6 +129,26 @@ OwnPtr<DebugSession> DebugSession::exec_and_attach(DeprecatedString const& comma
|
|||
return debug_session;
|
||||
}
|
||||
|
||||
OwnPtr<DebugSession> DebugSession::attach(pid_t pid, DeprecatedString source_root)
|
||||
{
|
||||
if (ptrace(PT_ATTACH, pid, 0, 0) < 0) {
|
||||
perror("PT_ATTACH");
|
||||
return {};
|
||||
}
|
||||
|
||||
int status = 0;
|
||||
if (waitpid(pid, &status, WSTOPPED | WEXITED) != pid || !WIFSTOPPED(status)) {
|
||||
perror("waitpid");
|
||||
return {};
|
||||
}
|
||||
|
||||
auto debug_session = adopt_own(*new DebugSession(pid, source_root));
|
||||
// At this point, libraries should have been loaded
|
||||
debug_session->update_loaded_libs();
|
||||
|
||||
return debug_session;
|
||||
}
|
||||
|
||||
bool DebugSession::poke(FlatPtr address, FlatPtr data)
|
||||
{
|
||||
if (ptrace(PT_POKE, m_debuggee_pid, bit_cast<void*>(address), bit_cast<void*>(data)) < 0) {
|
||||
|
|
|
@ -28,6 +28,7 @@ namespace Debug {
|
|||
class DebugSession : public ProcessInspector {
|
||||
public:
|
||||
static OwnPtr<DebugSession> exec_and_attach(DeprecatedString const& command, DeprecatedString source_root = {}, Function<ErrorOr<void>()> setup_child = {});
|
||||
static OwnPtr<DebugSession> attach(pid_t pid, DeprecatedString source_root = {});
|
||||
|
||||
virtual ~DebugSession() override;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue