1*cc02d7e2SAndroid Build Coastguard Worker# gRPC Python Debug Example 2*cc02d7e2SAndroid Build Coastguard Worker 3*cc02d7e2SAndroid Build Coastguard WorkerThis example demonstrate the usage of Channelz. For a better looking website, 4*cc02d7e2SAndroid Build Coastguard Workerthe [gdebug](https://github.com/grpc/grpc-experiments/tree/master/gdebug) uses 5*cc02d7e2SAndroid Build Coastguard WorkergRPC-Web protocol and will serve all useful information in web pages. 6*cc02d7e2SAndroid Build Coastguard Worker 7*cc02d7e2SAndroid Build Coastguard Worker## Channelz: Live Channel Tracing 8*cc02d7e2SAndroid Build Coastguard Worker 9*cc02d7e2SAndroid Build Coastguard WorkerChannelz is a channel tracing feature. It will track statistics like how many 10*cc02d7e2SAndroid Build Coastguard Workermessages have been sent, how many of them failed, what are the connected 11*cc02d7e2SAndroid Build Coastguard Workersockets. Since it is implemented in C-Core and has low-overhead, it is 12*cc02d7e2SAndroid Build Coastguard Workerrecommended to turn on for production services. See [Channelz design 13*cc02d7e2SAndroid Build Coastguard Workerdoc](https://github.com/grpc/proposal/blob/master/A14-channelz.md). 14*cc02d7e2SAndroid Build Coastguard Worker 15*cc02d7e2SAndroid Build Coastguard Worker## How to enable tracing log 16*cc02d7e2SAndroid Build Coastguard WorkerThe tracing log generation might have larger overhead, especially when you try 17*cc02d7e2SAndroid Build Coastguard Workerto trace transport. It would result in replicating the traffic loads. However, 18*cc02d7e2SAndroid Build Coastguard Workerit is still the most powerful tool when you need to dive in. 19*cc02d7e2SAndroid Build Coastguard Worker 20*cc02d7e2SAndroid Build Coastguard Worker### The Most Verbose Tracing Log 21*cc02d7e2SAndroid Build Coastguard Worker 22*cc02d7e2SAndroid Build Coastguard WorkerSpecify environment variables, then run your application: 23*cc02d7e2SAndroid Build Coastguard Worker 24*cc02d7e2SAndroid Build Coastguard Worker``` 25*cc02d7e2SAndroid Build Coastguard WorkerGRPC_VERBOSITY=debug 26*cc02d7e2SAndroid Build Coastguard WorkerGRPC_TRACE=all 27*cc02d7e2SAndroid Build Coastguard Worker``` 28*cc02d7e2SAndroid Build Coastguard Worker 29*cc02d7e2SAndroid Build Coastguard WorkerFor more granularity, please see 30*cc02d7e2SAndroid Build Coastguard Worker[environment_variables](https://github.com/grpc/grpc/blob/master/doc/environment_variables.md). 31*cc02d7e2SAndroid Build Coastguard Worker 32*cc02d7e2SAndroid Build Coastguard Worker### Debug Transport Protocol 33*cc02d7e2SAndroid Build Coastguard Worker 34*cc02d7e2SAndroid Build Coastguard Worker``` 35*cc02d7e2SAndroid Build Coastguard WorkerGRPC_VERBOSITY=debug 36*cc02d7e2SAndroid Build Coastguard WorkerGRPC_TRACE=tcp,http,secure_endpoint,transport_security 37*cc02d7e2SAndroid Build Coastguard Worker``` 38*cc02d7e2SAndroid Build Coastguard Worker 39*cc02d7e2SAndroid Build Coastguard Worker### Debug Connection Behavior 40*cc02d7e2SAndroid Build Coastguard Worker 41*cc02d7e2SAndroid Build Coastguard Worker``` 42*cc02d7e2SAndroid Build Coastguard WorkerGRPC_VERBOSITY=debug 43*cc02d7e2SAndroid Build Coastguard WorkerGRPC_TRACE=call_error,connectivity_state,pick_first,round_robin,glb 44*cc02d7e2SAndroid Build Coastguard Worker``` 45*cc02d7e2SAndroid Build Coastguard Worker 46*cc02d7e2SAndroid Build Coastguard Worker## How to debug your application? 47*cc02d7e2SAndroid Build Coastguard Worker 48*cc02d7e2SAndroid Build Coastguard Worker`pdb` is a debugging tool that is available for Python interpreters natively. 49*cc02d7e2SAndroid Build Coastguard WorkerYou can set breakpoint, and execute commands while the application is stopped. 50*cc02d7e2SAndroid Build Coastguard Worker 51*cc02d7e2SAndroid Build Coastguard WorkerThe simplest usage is add a single line in the place you want to inspect: 52*cc02d7e2SAndroid Build Coastguard Worker`import pdb; pdb.set_trace()`. When interpreter see this line, it would pop out 53*cc02d7e2SAndroid Build Coastguard Workera interactive command line interface for you to inspect the application state. 54*cc02d7e2SAndroid Build Coastguard Worker 55*cc02d7e2SAndroid Build Coastguard WorkerFor more detailed usage, see https://docs.python.org/3/library/pdb.html. 56*cc02d7e2SAndroid Build Coastguard Worker 57*cc02d7e2SAndroid Build Coastguard Worker**Caveat**: gRPC Python uses C-Extension under-the-hood, so `pdb` may not be 58*cc02d7e2SAndroid Build Coastguard Workerable to trace through the whole stack. 59*cc02d7e2SAndroid Build Coastguard Worker 60*cc02d7e2SAndroid Build Coastguard Worker## gRPC Command Line Tool 61*cc02d7e2SAndroid Build Coastguard Worker 62*cc02d7e2SAndroid Build Coastguard Worker`grpc_cli` is a handy tool to interact with gRPC backend easily. Imageine you can 63*cc02d7e2SAndroid Build Coastguard Workerinspect what service does a server provide without writing any code, and make 64*cc02d7e2SAndroid Build Coastguard WorkergRPC calls just like `curl`. 65*cc02d7e2SAndroid Build Coastguard Worker 66*cc02d7e2SAndroid Build Coastguard WorkerThe installation guide: https://github.com/grpc/grpc/blob/master/doc/command_line_tool.md#code-location 67*cc02d7e2SAndroid Build Coastguard WorkerThe usage guide: https://github.com/grpc/grpc/blob/master/doc/command_line_tool.md#usage 68*cc02d7e2SAndroid Build Coastguard WorkerThe source code: https://github.com/grpc/grpc/blob/master/test/cpp/util/grpc_cli.cc 69