I am working with the golang traces package. In a trace file collected from an execution, I am looking at an instance of EvGoBlockSelect
event and trying to find the channel send-receive pairs (their call stacks) that ultimately unblock this blocked event.
In the traces, after parsing, the Link
field of an EvGoBlockSelect
event points to an EvGoUnblock
event. This connection does not help in obtaining the channel activities that resulted in unblocking the goroutine blocked on EvGoBlockSelect
. Perhaps chasing a few more Link
s will lead to clearly establishing the send-receive pairs, but I don’t know how this can be done.
Below is the snippet of the trace:
<*trace.Event>(0xc000ed4bd0)
T=24=EvGoBlockSelect
G=26992255
T=3812773
Link = <*trace.Event>(0xc000ed4cf0)
T=21=EvGoUnblock
G=475
T=3832979
Link = <*trace.Event>(0xc000ed4e10)
T=14=EvGoStart
G=26992255
T=3841969
Link = <*trace.Event>(0xc000ed5050)
T=23=EvGoBlockRecv
G=26992255
T=4022571
Link = <*trace.Event>(0xc000edb3b0)
T=21=EvGoUnblock
G=26992257
T=7956792
Link =<*trace.Event>(0xc000edb4d0)
T=14=EvGoStart
G=26992255
T=7967489
Link =<*trace.Event>(0xc000edb4d0)