Skip to content

Async stack traces are very verbose. #19931

@treeform

Description

@treeform

Here is an example of one of my async stack traces:

C:\p\bencher\src\server.nim(990) server
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(1961) waitFor
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(1653) poll
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(419) runOnce
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(234) processPendingCallbacks
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncmacro.nim(31) processRequestNimAsyncContinue
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asynchttpserver.nim(330) processRequestIter
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncmacro.nim(232) cb
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncmacro.nim(28) cbNimAsyncContinue
C:\p\bencher\src\server.nim(971) cbIter
C:\p\bencher\src\server.nim(496) runs
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\system\fatal.nim(53) sysFatal
[[reraised from:
C:\p\bencher\src\server.nim(990) server
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(1961) waitFor
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(1653) poll
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(419) runOnce
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(234) processPendingCallbacks
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncmacro.nim(31) processRequestNimAsyncContinue
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncmacro.nim(131) processRequestIter
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncfutures.nim(389) read
]]
[[reraised from:
C:\p\bencher\src\server.nim(990) server
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(1961) waitFor
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(1653) poll
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(419) runOnce
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(234) processPendingCallbacks
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncmacro.nim(28) processClientNimAsyncContinue
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncmacro.nim(131) processClientIter
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncfutures.nim(389) read
]]
[[reraised from:
C:\p\bencher\src\server.nim(990) server
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(1961) waitFor
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(1653) poll
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(419) runOnce
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(234) processPendingCallbacks
C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncfutures.nim(437) asyncCheckCallback
]]
Error: unhandled exception: index 1000 not in 0 .. 13
Async traceback:
  C:\p\bencher\src\server.nim(990)                                              server
  C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(1961)  waitFor
  C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(1653)  poll
  C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(419)   runOnce
  C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(234)   processPendingCallbacks
  C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncmacro.nim(31)       processRequestNimAsyncContinue      
  C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asynchttpserver.nim(330) processRequestIter
  C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncmacro.nim(232)      cb
  C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncmacro.nim(28)       cbNimAsyncContinue
  C:\p\bencher\src\server.nim(971)                                              cbIter
  C:\p\bencher\src\server.nim(496)                                              runs
  C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\system\fatal.nim(53)          sysFatal
  #[
    C:\p\bencher\src\server.nim(990)                                              server
    C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(1961)  waitFor
    C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(1653)  poll
    C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(419)   runOnce
    C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(234)   processPendingCallbacks
    C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncmacro.nim(31)       processRequestNimAsyncContinue
    C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncmacro.nim(131)      processRequestIter
    C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncfutures.nim(389)    read
  ]#
  #[
    C:\p\bencher\src\server.nim(990)                                              server
    C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(1961)  waitFor
    C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(1653)  poll
    C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(419)   runOnce
    C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncdispatch.nim(234)   processPendingCallbacks
    C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncmacro.nim(28)       processClientNimAsyncContinue
    C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncmacro.nim(131)      processClientIter
    C:\Users\me\.choosenim\toolchains\nim-1.6.6\lib\pure\asyncfutures.nim(389)    read
  ]#
Exception message: index 1000 not in 0 .. 13
 [IndexDefect]

I expect a stack traces that looks some thing like this:

C:\p\bencher\src\server.nim(990) server
C:\p\bencher\src\server.nim(971) cbIter
C:\p\bencher\src\server.nim(496) runs
Error: unhandled exception: index 1000 not in 0 .. 13
 [IndexDefect]

That's right the function is only 3 async layers deep.

Maybe it would be helpful to mark async functions, so its easier to follow:

C:\p\bencher\src\server.nim(990) {.async.} server
C:\p\bencher\src\server.nim(971) {.async.} cbIter
C:\p\bencher\src\server.nim(496) {.async.} runs
Error: unhandled exception: index 1000 not in 0 .. 13
 [IndexDefect]

Currently even debugging simple async stack traces is very hard.

Metadata

Metadata

Assignees

No one assigned

    Labels

    AsyncEverything related to Nim's async

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions