From: "Denis V. Lunev" <den@openvz.org>
To: qemu-devel@nongnu.org
Cc: den@openvz.org, "Paolo Bonzini" <pbonzini@redhat.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Philippe Mathieu-Daudé" <philmd@oss.qualcomm.com>,
"Zhao Liu" <zhao1.liu@intel.com>, "Stefan Weil" <sw@weilnetz.de>
Subject: [PATCH 02/10] oslib: add qemu_debugger_attached()
Date: Tue, 15 Sep 2026 22:34:46 +0200 [thread overview]
Message-ID: <20260915203455.580999-3-den@openvz.org> (raw)
In-Reply-To: <20260915203455.580999-1-den@openvz.org>
From: Denis V. Lunev <den@openvz.org>
Code that watches for a hang has to tell a hang apart from a debugger
stop, because under a debugger every thread stops and whatever liveness
signal the watcher samples stops changing with them.
Linux reports the tracer in /proc/self/status and Windows has
IsDebuggerPresent(). Answer false elsewhere, which leaves the caller
behaving as it did before the check.
Match the Linux field at the start of a line. The Name: line holds
fifteen characters of comm, enough to spell the field name and appear
ahead of the real one.
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Richard Henderson <richard.henderson@linaro.org>
Cc: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
Cc: Zhao Liu <zhao1.liu@intel.com>
Cc: Stefan Weil <sw@weilnetz.de>
Signed-off-by: Denis V. Lunev <den@openvz.org>
---
include/qemu/osdep.h | 9 +++++++++
util/oslib-posix.c | 22 ++++++++++++++++++++++
util/oslib-win32.c | 5 +++++
3 files changed, 36 insertions(+)
diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
index 1ec5b42230..96afe09632 100644
--- a/include/qemu/osdep.h
+++ b/include/qemu/osdep.h
@@ -658,6 +658,15 @@ bool qemu_write_pidfile(const char *pidfile, Error **errp);
int qemu_get_thread_id(void);
+/**
+ * qemu_debugger_attached:
+ *
+ * Returns true if a debugger is currently tracing this process. Meant for
+ * code that would otherwise mistake a debugger stop for a hang, and false
+ * on hosts where this cannot be determined.
+ */
+bool qemu_debugger_attached(void);
+
/**
* qemu_kill_thread:
* @tid: thread id.
diff --git a/util/oslib-posix.c b/util/oslib-posix.c
index dc001da66d..4eb6a40628 100644
--- a/util/oslib-posix.c
+++ b/util/oslib-posix.c
@@ -112,6 +112,28 @@ int qemu_get_thread_id(void)
#endif
}
+bool qemu_debugger_attached(void)
+{
+#ifdef CONFIG_LINUX
+ static const char key[] = "TracerPid:";
+ g_autofree char *status = NULL;
+ const char *p = NULL;
+
+ if (!g_file_get_contents("/proc/self/status", &status, NULL, NULL)) {
+ return false;
+ }
+ while ((p = strstr(p ? p : status, key))) {
+ if (p == status || p[-1] == '\n') {
+ return atoi(p + sizeof(key) - 1) > 0;
+ }
+ p += sizeof(key) - 1;
+ }
+ return false;
+#else
+ return false;
+#endif
+}
+
int qemu_kill_thread(int tid, int sig)
{
#if defined(__linux__)
diff --git a/util/oslib-win32.c b/util/oslib-win32.c
index 5f3e8f4d98..6663d83151 100644
--- a/util/oslib-win32.c
+++ b/util/oslib-win32.c
@@ -228,6 +228,11 @@ int qemu_get_thread_id(void)
return GetCurrentThreadId();
}
+bool qemu_debugger_attached(void)
+{
+ return IsDebuggerPresent();
+}
+
char *
qemu_get_local_state_dir(void)
{
--
2.53.0
next prev parent reply other threads:[~2026-09-15 20:36 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-15 20:34 [PATCH 0/10] system: add a watchdog for the Big QEMU Lock Denis V. Lunev
2026-09-15 20:34 ` [PATCH 01/10] util/qemu-thread: track bql_locked across the timed condvar wait Denis V. Lunev
2026-10-14 22:36 ` Fabiano Rosas
2026-09-15 20:34 ` Denis V. Lunev [this message]
2026-09-15 20:34 ` [PATCH 03/10] oslib: add qemu_thread_states() Denis V. Lunev
2026-09-15 20:34 ` [PATCH 04/10] oslib: report kernel stacks in qemu_thread_states() Denis V. Lunev
2026-09-15 20:34 ` [PATCH 05/10] util/qemu-thread: reserve a signal for thread introspection Denis V. Lunev
2026-09-15 20:34 ` [PATCH 06/10] oslib: report each thread's program counter Denis V. Lunev
2026-09-15 20:34 ` [PATCH 07/10] system/cpus: report a BQL held past a deadline Denis V. Lunev
2026-09-15 20:34 ` [PATCH 08/10] system/cpus: hold off the BQL watchdog under a debugger Denis V. Lunev
2026-09-15 20:34 ` [PATCH 09/10] system/cpus: add bql-watchdog-abort Denis V. Lunev
2026-10-14 23:30 ` Fabiano Rosas
2026-09-15 20:34 ` [PATCH 10/10] tests/functional: cover the BQL watchdog Denis V. Lunev
2026-09-16 4:57 ` Thomas Huth
2026-09-16 6:44 ` Marc-André Lureau
2026-09-16 7:56 ` Denis V. Lunev
2026-09-18 21:56 ` [PATCH 0/10] system: add a watchdog for the Big QEMU Lock Fabiano Rosas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260915203455.580999-3-den@openvz.org \
--to=den@openvz.org \
--cc=pbonzini@redhat.com \
--cc=philmd@oss.qualcomm.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=sw@weilnetz.de \
--cc=zhao1.liu@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.