| # 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 |