一、写在前面
在编写RDMA代码时,同时是使用ibv_verbs进行编程,需要在.c文件顶部调用<infiniband/verbs.h>这个头文件,但是我们在调试时,如通过GDB进行调试时,无法进入函数内部进行调试,如ibv_create_qp这个API,我们无法进入其内部。这是因为我们应该进入libibverbs内部进行调试,而不是<infiniband.verbs.h>中,下面是具体的调试方式。
二、具体调试方式
- 从github上下载rdma-core用户态代码库:https://github.com/linux-rdma/rdma-core
- 解压并进入文件夹
- 执行./build.sh指令
- 将自己编写的rdma程序(下文中表述为client.c)放入rdma-core/build/lib目录内
- 编译:gcc client.c -o client -g -L. -Wl,-rpath=./ -libverbs
- 开始调试:gdb clent
- 设置代码参数(这个看自己的代码是怎么写的):set args 192.68.79.134 -d rxe_0 -i 1 -g 1
- 设置源码目录:dir …/…/libibverbs
- 在对应代码处添加断点:假设ibv_create_qp代码在第50行,则运行指令 b 50
- 运行至该代码处:r
- 进入函数内部进行调试:s
- 之后你就会发现你已经进入了rdma-core库中了,可以看到用户态的代码的实现方式了