跟踪asio日志
#define BOOST_ASIO_ENABLE_HANDLER_TRACKING
#include
./a.out 2>out.log
sudo apt-get install graphviz
perl handlerviz.pl < out.log | dot -Tpng > out.png

@asio|1528964168.087468|01|[email protected]_wait
@asio|1528964168.087629|0
2|[email protected]_waitbr/>@asio|1528964181.199519|>1|ec=system:0,signal_number=10
@asio|1528964181.199596|<1|br/>@asio|1528964181.199628|>2|ec=system:0,signal_number=10
@asio|1528964181.199671|<2|
@asio|1528964181.199717|0|[email protected]

跟踪asio日志_第1张图片

out.log格式解释,请参考 https://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/overview/core/handler_tracking.html

摘抄过来:
Each line is of the form:

|||

The is always @asio, and is used to identify and extract the handler tracking messages from the program output.

The is seconds and microseconds from 1 Jan 1970 UTC.

The takes one of the following forms:

n

The program entered the handler number n. The  shows the arguments to the handler. 

The program left handler number n. 

!n

The program left handler number n due to an exception. 

~n

The handler number n was destroyed without having been invoked. This is usually the case for any unfinished asynchronous operations when the io_service is destroyed. 

n*m

The handler number n created a new asynchronous operation with completion handler number m. The  shows what asynchronous operation was started. 

n

The handler number n performed some other operation. The  shows what function was called. Currently only close() and cancel() operations are logged, as these may affect the state of pending asynchronous operations. 

Where the shows a synchronous or asynchronous operation, the format is @.. For handler entry, it shows a comma-separated list of arguments and their values.

As shown above, Each handler is assigned a numeric identifier. Where the handler tracking output shows a handler number of 0, it means that the action was performed outside of any handler.