Skip to content

Provide a helper to dump the task tree / stack tree #927

Open
@njsmith

Description

@njsmith

This would be useful in several situations:

  • Possibly we should default to registering a handler for SIGUSR1 (or something similarly innocuous, like SIGIO or SIGSYS), to dump the task tree to stderr. This would help a lot with debugging deadlocks (like @Ninpo has been running into in chat recently)

  • It would be useful for a watchdog thread: Add a blocked task watchdog #591

  • pytest-trio can/should detect frozen tests (Add test timeout support pytest-trio#53), and this would be really useful for diagnosing them (esp. in cases like where the deadlock happens in a remote CI system)

  • It would be useful for tutorials

There's a simple task tree formatter in notes-to-self/.

@oremanj apparently has a version that shows the full stack trace for all tasks. This involves some terrifying hacks to figure out after-the-fact which stack frames created which nurseries, and to work around bpo-32810 (see).

I had a potential idea for how to match up the frames without the terrifying hacks.

For large apps we might want to do some kind of "stack trace compression". Like if you have 1000 tasks, then probably 990 of them have the exact same stack, possibly modulo the last frame or so. Grouping them together based on common prefixes and only printing the prefix once probably makes dumps in this case much more readable.

We don't have to do all of these things in the first version. We can start simpler and iterate.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions