diff options
author | Itamar <itamar8910@gmail.com> | 2021-12-20 22:37:19 +0200 |
---|---|---|
committer | Brian Gianforcaro <b.gianfo@gmail.com> | 2021-12-22 02:14:32 -0800 |
commit | a02d8e57101ba643c1b9978663cd43cea3caa85a (patch) | |
tree | 38345bebe9698ebacde9e0b4d4d95e254ef95b8f /Userland/Libraries | |
parent | 0cea8d13105774939b2d08d019d1e7b9f6d4ae7d (diff) | |
download | serenity-a02d8e57101ba643c1b9978663cd43cea3caa85a.zip |
LibDebug: Add optional setup_child() callback to debugger
If set, this callback gets called right after fork() in the child
process.
It can be used by the caller if it wants to perform some logic in the
child process before it starts executing the debuggee program.
Diffstat (limited to 'Userland/Libraries')
-rw-r--r-- | Userland/Libraries/LibDebug/DebugSession.cpp | 12 | ||||
-rw-r--r-- | Userland/Libraries/LibDebug/DebugSession.h | 3 |
2 files changed, 13 insertions, 2 deletions
diff --git a/Userland/Libraries/LibDebug/DebugSession.cpp b/Userland/Libraries/LibDebug/DebugSession.cpp index 487132c2d2..b715a1620d 100644 --- a/Userland/Libraries/LibDebug/DebugSession.cpp +++ b/Userland/Libraries/LibDebug/DebugSession.cpp @@ -53,7 +53,9 @@ void DebugSession::for_each_loaded_library(Function<IterationDecision(LoadedLibr } } -OwnPtr<DebugSession> DebugSession::exec_and_attach(String const& command, String source_root) +OwnPtr<DebugSession> DebugSession::exec_and_attach(String const& command, + String source_root, + Function<ErrorOr<void>()> setup_child) { auto pid = fork(); @@ -63,6 +65,14 @@ OwnPtr<DebugSession> DebugSession::exec_and_attach(String const& command, String } if (!pid) { + + if (setup_child) { + if (setup_child().is_error()) { + perror("DebugSession::setup_child"); + exit(1); + } + } + if (ptrace(PT_TRACE_ME, 0, 0, 0) < 0) { perror("PT_TRACE_ME"); exit(1); diff --git a/Userland/Libraries/LibDebug/DebugSession.h b/Userland/Libraries/LibDebug/DebugSession.h index 0949ca47f7..eaffaa82c4 100644 --- a/Userland/Libraries/LibDebug/DebugSession.h +++ b/Userland/Libraries/LibDebug/DebugSession.h @@ -7,6 +7,7 @@ #pragma once #include <AK/Demangle.h> +#include <AK/Function.h> #include <AK/HashMap.h> #include <AK/NonnullRefPtr.h> #include <AK/Optional.h> @@ -26,7 +27,7 @@ namespace Debug { class DebugSession : public ProcessInspector { public: - static OwnPtr<DebugSession> exec_and_attach(String const& command, String source_root = {}); + static OwnPtr<DebugSession> exec_and_attach(String const& command, String source_root = {}, Function<ErrorOr<void>()> setup_child = {}); virtual ~DebugSession() override; |