Understood.
Not sure why gdb is not showing linenumbers to you.. but I build grpc library by setting the environment variable "CONFIG = dbg". (Most of the time I am lazy and just have our test script do the build for me .. i.e do
$tools/run_tests/run_tests.py -lc -cdbg --build_only
$ tools/run_tests/run_tests.py -lc++ -cdbg --build_only"
Now regarding understanding how the flow works, I can tell you what worked for my rampup :) (can't say it works for everyone).
I would first look at the grpc-c core API (under include/grpc/grpc.h) which is a bit more basic (C++ API wraps our grpc-c core api)
and then look at the following simple client and servers written to use the C-Core APIs (separately under two instances of gdb)
$grpc/test/core/fling/server.c
$grpc/test/core/fling/client.c
Put breakpoints at the following places on both client and server (some of them are more interesting for client and some for server but it doesn't matter):
// kicks off the chain of callbacks when the fds become readable/writable
fd_become_readable
fd_become_writable
// This is the one that starts a "batch of operations in a call" and also sets up the appropriate callbacks to call
call_start_batch
// Callback that ends up getting called on the server side for an incoming rpc
accept_stream
There are obviously a LOT more places to poke around but the above is a good start.
Good luck debugging
thanks
Sree