summaryrefslogtreecommitdiffhomepage
path: root/src/DebuggerKit
diff options
context:
space:
mode:
Diffstat (limited to 'src/DebuggerKit')
-rw-r--r--src/DebuggerKit/src/MachContract.cpp3
-rw-r--r--src/DebuggerKit/src/MachContractCLI.cpp4
-rw-r--r--src/DebuggerKit/src/NeKernelContractCLI.cpp2
-rw-r--r--src/DebuggerKit/src/POSIXContractCLI.cpp94
4 files changed, 97 insertions, 6 deletions
diff --git a/src/DebuggerKit/src/MachContract.cpp b/src/DebuggerKit/src/MachContract.cpp
index 8a897be..518f61a 100644
--- a/src/DebuggerKit/src/MachContract.cpp
+++ b/src/DebuggerKit/src/MachContract.cpp
@@ -9,8 +9,6 @@
#include <DebuggerKit/MachContract.h>
#include <ThirdParty/Dialogs/Dialogs.h>
-#ifdef DK_MACH_DEBUGGER
-
/// @brief a terrible way to import globals.
#include <DebuggerKit/Common.inl>
@@ -95,6 +93,5 @@ NECTAR_MODULE(DebuggerMachPOSIX) {
return EXIT_SUCCESS;
}
-#endif
#endif
diff --git a/src/DebuggerKit/src/MachContractCLI.cpp b/src/DebuggerKit/src/MachContractCLI.cpp
index 0cc9b99..9bdb5b1 100644
--- a/src/DebuggerKit/src/MachContractCLI.cpp
+++ b/src/DebuggerKit/src/MachContractCLI.cpp
@@ -6,7 +6,7 @@
#ifdef DK_MACH_DEBUGGER
-#include <DebuggerKit/POSIXMachContract.h>
+#include <DebuggerKit/MachContract.h>
#include <ThirdParty/Dialogs/Dialogs.h>
#ifdef DK_MACH_DEBUGGER
@@ -84,7 +84,7 @@ NECTAR_MODULE(DebuggerMach) {
std::getline(std::cin, cmd);
if (kUserDebugger.BreakAt(cmd)) {
- pfd::notify("Debugger Event", "Add BreakAt at: " + cmd);
+ pfd::notify("Debugger Event", "Add breakpoint at: " + cmd);
}
}
}
diff --git a/src/DebuggerKit/src/NeKernelContractCLI.cpp b/src/DebuggerKit/src/NeKernelContractCLI.cpp
index 3680f6a..13144eb 100644
--- a/src/DebuggerKit/src/NeKernelContractCLI.cpp
+++ b/src/DebuggerKit/src/NeKernelContractCLI.cpp
@@ -82,7 +82,7 @@ NECTAR_MODULE(DebuggerNeKernel) {
std::getline(std::cin, cmd);
if (kKernelDebugger.BreakAt(cmd)) {
- pfd::notify("Debugger Event", "Add BreakAt at: " + cmd);
+ pfd::notify("Debugger Event", "Add breakpoint at: " + cmd);
}
}
}
diff --git a/src/DebuggerKit/src/POSIXContractCLI.cpp b/src/DebuggerKit/src/POSIXContractCLI.cpp
new file mode 100644
index 0000000..58aa4a1
--- /dev/null
+++ b/src/DebuggerKit/src/POSIXContractCLI.cpp
@@ -0,0 +1,94 @@
+// SPDX-License-Identifier: Apache-2.0
+// Copyright 2024-2026, Amlal El Mahrouss (amlal@nekernel.org)
+// Licensed under the Apache License, Version 2.0 (See accompanying
+// file LICENSE or copy at http://www.apache.org/licenses/LICENSE-2.0)
+// Official repository: https://github.com/ne-foss-org/nectar
+
+#ifdef DK_POSIX_DEBUGGER
+
+#include <DebuggerKit/POSIXContract.h>
+#include <ThirdParty/Dialogs/Dialogs.h>
+
+#include <DebuggerKit/Common.inl>
+
+/// @internal
+/// @brief Handles CTRL-C signal on debugger.
+static Void dbgi_ctrlc_handler(std::int32_t _) {
+ if (!kPID) {
+ return;
+ }
+
+ kUserDebugger.Break();
+
+ pfd::notify("Debugger Event", "Breakpoint hit!");
+
+ kKeepRunning = false;
+}
+
+NECTAR_MODULE(DebuggerPOSIX) {
+ pfd::notify(
+ "Debugger Event",
+ "Userland Debugger\n(C) 2025 Amlal El Mahrouss, licensed under the Apache 2.0 license.");
+
+ if (argc >= 3 && std::string(argv[1]) == "-p" && argv[2] != nullptr) {
+ kPath = argv[2];
+ kUserDebugger.SetPath(kPath);
+
+ kStdOut << "[+] Image set to: " << kPath << "\n";
+ } else {
+ kStdOut << "usage: " << argv[0] << " -p <path>\n";
+ kStdOut << "example: " << argv[0] << " -p </path/to/program>\n";
+
+ return EXIT_FAILURE;
+ }
+
+ CompilerKit::install_signal(SIGINT, dbgi_ctrlc_handler);
+
+ while (YES) {
+ if (kKeepRunning) {
+ continue;
+ }
+
+ CompilerKit::STLString cmd{};
+
+ if (!std::getline(std::cin, cmd)) break;
+
+ if (cmd == "c" || cmd == "cont" || cmd == "continue") {
+ if (kUserDebugger.Continue()) {
+ kKeepRunning = true;
+
+ kStdOut << "[+] Continuing...\n";
+ pfd::notify("Debugger Event", "Continuing...");
+ }
+ }
+
+ if (cmd == "d" || cmd == "detach") kUserDebugger.Detach();
+
+ if (cmd == "start") {
+ kStdOut << "[?] Enter a argument to use: ";
+ std::getline(std::cin, cmd);
+
+ kUserDebugger.Attach(kPath, cmd, kPID);
+ }
+
+ if (cmd == "exit") {
+ if (kPID > 0) kUserDebugger.Detach();
+
+ break;
+ }
+
+ if (cmd == "break" || cmd == "b") {
+ kStdOut << "[?] Enter a symbol to break on: ";
+
+ std::getline(std::cin, cmd);
+
+ if (kUserDebugger.BreakAt(cmd)) {
+ pfd::notify("Debugger Event", "Add breakpoint at: " + cmd);
+ }
+ }
+ }
+
+ return EXIT_SUCCESS;
+}
+
+#endif