| # gRPC Python Debug Example | |
| This example demonstrate the usage of Channelz. For a better looking website, | |
| the [gdebug](https://github.com/grpc/grpc-experiments/tree/master/gdebug) uses | |
| gRPC-Web protocol and will serve all useful information in web pages. | |
| ## Channelz: Live Channel Tracing | |
| Channelz is a channel tracing feature. It will track statistics like how many | |
| messages have been sent, how many of them failed, what are the connected | |
| sockets. Since it is implemented in C-Core and has low-overhead, it is | |
| recommended to turn on for production services. See [Channelz design | |
| doc](https://github.com/grpc/proposal/blob/master/A14-channelz.md). | |
| ## How to enable tracing log | |
| The tracing log generation might have larger overhead, especially when you try | |
| to trace transport. It would result in replicating the traffic loads. However, | |
| it is still the most powerful tool when you need to dive in. | |
| ### The Most Verbose Tracing Log | |
| Specify environment variables, then run your application: | |
| ``` | |
| GRPC_VERBOSITY=debug | |
| GRPC_TRACE=all | |
| ``` | |
| For more granularity, please see | |
| [environment_variables](https://github.com/grpc/grpc/blob/master/doc/environment_variables.md). | |
| ### Debug Transport Protocol | |
| ``` | |
| GRPC_VERBOSITY=debug | |
| GRPC_TRACE=tcp,http,secure_endpoint,transport_security | |
| ``` | |
| ### Debug Connection Behavior | |
| ``` | |
| GRPC_VERBOSITY=debug | |
| GRPC_TRACE=call_error,connectivity_state,pick_first,round_robin,glb | |
| ``` | |
| ## How to debug your application? | |
| `pdb` is a debugging tool that is available for Python interpreters natively. | |
| You can set breakpoint, and execute commands while the application is stopped. | |
| The simplest usage is add a single line in the place you want to inspect: | |
| `import pdb; pdb.set_trace()`. When interpreter see this line, it would pop out | |
| a interactive command line interface for you to inspect the application state. | |
| For more detailed usage, see https://docs.python.org/3/library/pdb.html. | |
| **Caveat**: gRPC Python uses C-Extension under-the-hood, so `pdb` may not be | |
| able to trace through the whole stack. | |
| ## gRPC Command Line Tool | |
| `grpc_cli` is a handy tool to interact with gRPC backend easily. Imageine you can | |
| inspect what service does a server provide without writing any code, and make | |
| gRPC calls just like `curl`. | |
| The installation guide: https://github.com/grpc/grpc/blob/master/doc/command_line_tool.md#code-location | |
| The usage guide: https://github.com/grpc/grpc/blob/master/doc/command_line_tool.md#usage | |
| The source code: https://github.com/grpc/grpc/blob/master/test/cpp/util/grpc_cli.cc |