|
2 | 2 |
|
3 | 3 | ## Unreleased
|
4 | 4 |
|
5 |
| -### Async::Scheduler Debug |
| 5 | +### Async::Scheduler Debugging |
6 | 6 |
|
7 |
| -Occasionally on issues, I encounter people asking for help and I need more information. Pressing Ctrl-C to exit a hung program is common, but it doesn't provide enough information to diagnose the problem. I've added a new environment variable, `ASYNC_SCHEDULER_DEBUG=true` which will print out the current state of the scheduler when you press Ctrl-C. |
| 7 | +Occasionally on issues, I encounter people asking for help and I need more information. Pressing Ctrl-C to exit a hung program is common, but it usually doesn't provide enough information to diagnose the problem. Setting the `CONSOLE_LEVEL=debug` environment variable will now print additional information about the scheduler when you interrupt it, including a backtrace of the current tasks. |
8 | 8 |
|
9 | 9 | ```
|
10 |
| -> ASYNC_SCHEDULER_DEBUG=true bundle exec ruby ./test.rb |
11 |
| -^CScheduler interrupted: Interrupt |
12 |
| -#<Async::Reactor:0x0000000000000910 1 children (running)> |
13 |
| - #<Async::Task:0x0000000000000924 /home/samuel/Developer/socketry/async/lib/async/scheduler.rb:187:in `transfer' (running)> |
14 |
| - → /home/samuel/Developer/socketry/async/lib/async/scheduler.rb:187:in `transfer' |
15 |
| - /home/samuel/Developer/socketry/async/lib/async/scheduler.rb:187:in `block' |
16 |
| - /home/samuel/Developer/socketry/async/lib/async/scheduler.rb:209:in `kernel_sleep' |
17 |
| - ./test.rb:4:in `sleep' |
18 |
| - ./test.rb:4:in `sleepy' |
19 |
| - ./test.rb:10:in `sleepy' |
20 |
| - ./test.rb:10:in `sleepy' |
21 |
| - ./test.rb:10:in `sleepy' |
22 |
| - ./test.rb:14:in `block in <main>' |
23 |
| - /home/samuel/Developer/socketry/async/lib/async/task.rb:197:in `block in run' |
24 |
| - /home/samuel/Developer/socketry/async/lib/async/task.rb:420:in `block in schedule' |
25 |
| - #<Async::Task:0x0000000000000938 /home/samuel/Developer/socketry/async/lib/async/scheduler.rb:187:in `transfer' (running)> |
26 |
| - → /home/samuel/Developer/socketry/async/lib/async/scheduler.rb:187:in `transfer' |
27 |
| - /home/samuel/Developer/socketry/async/lib/async/scheduler.rb:187:in `block' |
28 |
| - /home/samuel/Developer/socketry/async/lib/async/scheduler.rb:209:in `kernel_sleep' |
29 |
| - ./test.rb:4:in `sleep' |
30 |
| - ./test.rb:4:in `sleepy' |
31 |
| - ./test.rb:10:in `sleepy' |
32 |
| - ./test.rb:10:in `sleepy' |
33 |
| - ./test.rb:7:in `block in sleepy' |
34 |
| - /home/samuel/Developer/socketry/async/lib/async/task.rb:197:in `block in run' |
35 |
| - /home/samuel/Developer/socketry/async/lib/async/task.rb:420:in `block in schedule' |
36 |
| -/home/samuel/Developer/socketry/async/lib/async/scheduler.rb:319:in `select': Interrupt |
37 |
| - from /home/samuel/Developer/socketry/async/lib/async/scheduler.rb:319:in `run_once!' |
38 |
| - from /home/samuel/Developer/socketry/async/lib/async/scheduler.rb:355:in `run_once' |
39 |
| - from /home/samuel/Developer/socketry/async/lib/async/scheduler.rb:417:in `block in run' |
40 |
| - from /home/samuel/Developer/socketry/async/lib/async/scheduler.rb:388:in `block in run_loop' |
41 |
| - from /home/samuel/Developer/socketry/async/lib/async/scheduler.rb:385:in `handle_interrupt' |
42 |
| - from /home/samuel/Developer/socketry/async/lib/async/scheduler.rb:385:in `run_loop' |
43 |
| - from /home/samuel/Developer/socketry/async/lib/async/scheduler.rb:416:in `run' |
44 |
| - from /home/samuel/Developer/socketry/async/lib/kernel/async.rb:34:in `Async' |
45 |
| - from ./test.rb:13:in `<main>' |
| 10 | +> CONSOLE_LEVEL=debug bundle exec ruby ./test.rb |
| 11 | +^C 0.0s debug: Async::Reactor [oid=0x974] [ec=0x988] [pid=9116] [2024-11-08 14:12:03 +1300] |
| 12 | + | Scheduler interrupted: Interrupt |
| 13 | + | #<Async::Reactor:0x0000000000000974 1 children (running)> |
| 14 | + | #<Async::Task:0x000000000000099c /Users/samuel/Developer/socketry/async/lib/async/scheduler.rb:185:in `transfer' (running)> |
| 15 | + | → /Users/samuel/Developer/socketry/async/lib/async/scheduler.rb:185:in `transfer' |
| 16 | + | /Users/samuel/Developer/socketry/async/lib/async/scheduler.rb:185:in `block' |
| 17 | + | /Users/samuel/Developer/socketry/async/lib/async/scheduler.rb:207:in `kernel_sleep' |
| 18 | + | /Users/samuel/Developer/socketry/async/test.rb:7:in `sleep' |
| 19 | + | /Users/samuel/Developer/socketry/async/test.rb:7:in `sleepy' |
| 20 | + | /Users/samuel/Developer/socketry/async/test.rb:12:in `block in <top (required)>' |
| 21 | + | /Users/samuel/Developer/socketry/async/lib/async/task.rb:197:in `block in run' |
| 22 | + | /Users/samuel/Developer/socketry/async/lib/async/task.rb:420:in `block in schedule' |
| 23 | +/Users/samuel/Developer/socketry/async/lib/async/scheduler.rb:317:in `select': Interrupt |
| 24 | +... (backtrace continues) ... |
46 | 25 | ```
|
47 | 26 |
|
48 | 27 | This gives better visibility into what the scheduler is doing, and should help diagnose issues.
|
|
0 commit comments