public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
From: "Botond Dénes" <bdenes@scylladb.com>
To: gdb@sourceware.org
Subject: Stack unwinding for green threads
Date: Fri, 03 Jul 2020 12:50:54 +0300	[thread overview]
Message-ID: <e442bf31fb064f476cc829cc71767f995495d071.camel@scylladb.com> (raw)

Hi,

I'm working on Scylla [1], an application which is built using the
seastar framework [2]. This framework provides green threads [3] that
have their own stacks. These threads are created with `setcontext()`
and later we switch in/out using `setjmp()`/`longjmp()`.

We have a collection of python scripts [4] to help debug Scylla, among
these we have a utility command which allows switching in/out of these
green threads in gdb. This command basically (tries) to emulate
`setjmp()`/`longjmp()` in python, saving and restoring registers. There
are several problems with this method. For starters it crashes gdb for
some time now, and also it doesn't work in coredumps, where gdb refuses
to write to registers (even after `set write on`). So for these reasons
I started to look for alternative ways to unwind the stacks of our
green threads. However after going through the gdb documentation [5],
reading all I could find about threads, stacks, frames and the Python
API I haven't found an entry point to call which would unwind a stack
located at a custom address (not the current $rsp). Is there such an
API that I haven't found? Is there another way to achive what I want?
Alternatively, how hard would it be to implement such an API?

Thanks,
Botond

[1] https://github.com/scylladb/scylla
[2] https://github.com/scylladb/seastar
[3] http://docs.seastar.io/master/group__thread-module.html
[4] https://github.com/scylladb/scylla/blob/master/scylla-gdb.py
[5] https://sourceware.org/gdb/onlinedocs/gdb/index.html


             reply	other threads:[~2020-07-03  9:50 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-03  9:50 Botond Dénes [this message]
2020-07-03 10:16 ` Andrew Burgess
2020-07-03 17:36   ` Botond Dénes
2020-07-06 17:48 ` Christian Biesinger
2020-07-07  6:18   ` Botond Dénes

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=e442bf31fb064f476cc829cc71767f995495d071.camel@scylladb.com \
    --to=bdenes@scylladb.com \
    --cc=gdb@sourceware.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).