Round 297: Strace ext, Ltrace ext, Perf ext, Valgrind ext, GDB ext (20 commands)

ober

cefd3fd96c21d350e5ecd6030e4600bb709c52af

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 5f42709..c6b3710 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -4583,6 +4583,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | ebib-import-file | :orange_circle: | Import file into Ebib |
 | ebib-push-citation | :orange_circle: | Push Ebib citation to buffer |
 
+### Round 297 — Strace ext, Ltrace ext, Perf ext, Valgrind ext, GDB ext
+
+| Command | Status | Description |
+|---------|--------|-------------|
+| strace-attach | :orange_circle: | Attach strace to PID |
+| strace-run | :orange_circle: | Run command under strace |
+| strace-filter | :orange_circle: | Filter strace syscalls |
+| strace-count | :orange_circle: | Count syscalls |
+| ltrace-attach | :orange_circle: | Attach ltrace to PID |
+| ltrace-run | :orange_circle: | Run command under ltrace |
+| ltrace-filter | :orange_circle: | Filter ltrace calls |
+| ltrace-library | :orange_circle: | Trace specific library |
+| perf-stat | :orange_circle: | Perf stat counters |
+| perf-record | :orange_circle: | Record perf data |
+| perf-report | :orange_circle: | Show perf report |
+| perf-top | :orange_circle: | Live perf profiling |
+| valgrind-memcheck | :orange_circle: | Valgrind memcheck |
+| valgrind-callgrind | :orange_circle: | Valgrind callgrind |
+| valgrind-cachegrind | :orange_circle: | Valgrind cachegrind |
+| valgrind-massif | :orange_circle: | Valgrind massif |
+| gdb-attach | :orange_circle: | Attach GDB to PID |
+| gdb-run | :orange_circle: | Run program in GDB |
+| gdb-backtrace | :orange_circle: | Show GDB backtrace |
+| gdb-breakpoint | :orange_circle: | Set GDB breakpoint |
+
 ### Round 296 — Tcpdump ext, Tshark ext, Iftop ext, Nethogs ext, Vnstat ext, Iperf3 ext
 
 | Command | Status | Description |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 1a820ab..419fb0e 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -22745,4 +22745,60 @@
   (let* ((echo (app-state-echo app)))
     (echo-read-string echo "Server: "
       (lambda (srv)
-        (echo-message! echo (str "Iperf3: connecting to " srv))))))
\ No newline at end of file
+        (echo-message! echo (str "Iperf3: connecting to " srv))))))
+
+;;; Round 297 — Perf ext, Valgrind ext, GDB ext (batch 2)
+
+(def (cmd-perf-report app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Perf: showing report")))
+
+(def (cmd-perf-top app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Perf: live profiling")))
+
+(def (cmd-valgrind-memcheck app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Command: "
+      (lambda (cmd)
+        (echo-message! echo (str "Valgrind: memcheck " cmd))))))
+
+(def (cmd-valgrind-callgrind app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Command: "
+      (lambda (cmd)
+        (echo-message! echo (str "Valgrind: callgrind " cmd))))))
+
+(def (cmd-valgrind-cachegrind app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Command: "
+      (lambda (cmd)
+        (echo-message! echo (str "Valgrind: cachegrind " cmd))))))
+
+(def (cmd-valgrind-massif app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Command: "
+      (lambda (cmd)
+        (echo-message! echo (str "Valgrind: massif " cmd))))))
+
+(def (cmd-gdb-attach app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "PID: "
+      (lambda (pid)
+        (echo-message! echo (str "GDB: attaching to " pid))))))
+
+(def (cmd-gdb-run app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Program: "
+      (lambda (prog)
+        (echo-message! echo (str "GDB: running " prog))))))
+
+(def (cmd-gdb-backtrace app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "GDB: showing backtrace")))
+
+(def (cmd-gdb-breakpoint app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Location: "
+      (lambda (loc)
+        (echo-message! echo (str "GDB: breakpoint at " loc))))))
\ No newline at end of file
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 72d6fb6..9d2f638 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -23454,3 +23454,65 @@
       (lambda (iface)
         (echo-message! echo (str "Iftop: monitoring " iface))))))
 
+;;; Round 297 — Strace ext, Ltrace ext, Perf ext (batch 1)
+
+(def (cmd-strace-attach app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "PID: "
+      (lambda (pid)
+        (echo-message! echo (str "Strace: attaching to " pid))))))
+
+(def (cmd-strace-run app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Command: "
+      (lambda (cmd)
+        (echo-message! echo (str "Strace: running " cmd))))))
+
+(def (cmd-strace-filter app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Syscall filter: "
+      (lambda (flt)
+        (echo-message! echo (str "Strace: filter " flt))))))
+
+(def (cmd-strace-count app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "PID: "
+      (lambda (pid)
+        (echo-message! echo (str "Strace: counting syscalls for " pid))))))
+
+(def (cmd-ltrace-attach app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "PID: "
+      (lambda (pid)
+        (echo-message! echo (str "Ltrace: attaching to " pid))))))
+
+(def (cmd-ltrace-run app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Command: "
+      (lambda (cmd)
+        (echo-message! echo (str "Ltrace: running " cmd))))))
+
+(def (cmd-ltrace-filter app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Library filter: "
+      (lambda (flt)
+        (echo-message! echo (str "Ltrace: filter " flt))))))
+
+(def (cmd-ltrace-library app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Library: "
+      (lambda (lib)
+        (echo-message! echo (str "Ltrace: tracing " lib))))))
+
+(def (cmd-perf-stat app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Command: "
+      (lambda (cmd)
+        (echo-message! echo (str "Perf: stat " cmd))))))
+
+(def (cmd-perf-record app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Command: "
+      (lambda (cmd)
+        (echo-message! echo (str "Perf: recording " cmd))))))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 09ff74a..1994603 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -7654,4 +7654,25 @@
   (register-command! 'vnstat-live cmd-vnstat-live)
   (register-command! 'iperf3-server cmd-iperf3-server)
   (register-command! 'iperf3-client cmd-iperf3-client)
+  ;; Round 297
+  (register-command! 'strace-attach cmd-strace-attach)
+  (register-command! 'strace-run cmd-strace-run)
+  (register-command! 'strace-filter cmd-strace-filter)
+  (register-command! 'strace-count cmd-strace-count)
+  (register-command! 'ltrace-attach cmd-ltrace-attach)
+  (register-command! 'ltrace-run cmd-ltrace-run)
+  (register-command! 'ltrace-filter cmd-ltrace-filter)
+  (register-command! 'ltrace-library cmd-ltrace-library)
+  (register-command! 'perf-stat cmd-perf-stat)
+  (register-command! 'perf-record cmd-perf-record)
+  (register-command! 'perf-report cmd-perf-report)
+  (register-command! 'perf-top cmd-perf-top)
+  (register-command! 'valgrind-memcheck cmd-valgrind-memcheck)
+  (register-command! 'valgrind-callgrind cmd-valgrind-callgrind)
+  (register-command! 'valgrind-cachegrind cmd-valgrind-cachegrind)
+  (register-command! 'valgrind-massif cmd-valgrind-massif)
+  (register-command! 'gdb-attach cmd-gdb-attach)
+  (register-command! 'gdb-run cmd-gdb-run)
+  (register-command! 'gdb-backtrace cmd-gdb-backtrace)
+  (register-command! 'gdb-breakpoint cmd-gdb-breakpoint)
 )