gdb:打印sockaddr指针值

gdb: print sockaddr pointer value

本文关键字:指针 sockaddr 打印 gdb      更新时间:2023-10-16

目前我正在尝试部署一个用C++编写的网络应用程序,但由于网络问题,它似乎陷入了无限循环:

[isaev@feck-5 ~]$ sudo strace -p 26252 -f -e trace=network -s 10000 
[pid 26272] getpeername(30, 0x7f1699ddfb60, [28]) = -1 ENOTCONN (Transport endpoint is not connected)
[pid 26272] getpeername(30, 0x7f1699ddfb60, [28]) = -1 ENOTCONN (Transport endpoint is not connected)
[pid 26272] getpeername(30, 0x7f1699ddfb60, [28]) = -1 ENOTCONN (Transport endpoint is not connected)
[pid 26272] getpeername(30, 0x7f1699ddfb60, [28]) = -1 ENOTCONN (Transport endpoint is not connected)
[pid 26272] getpeername(30, 0x7f1699ddfb60, [28]) = -1 ENOTCONN (Transport endpoint is not connected)
[pid 26272] getpeername(30, 0x7f1699ddfb60, [28]) = -1 ENOTCONN (Transport endpoint is not connected)
[pid 26272] getpeername(30, 0x7f1699ddfb60, [28]) = -1 ENOTCONN (Transport endpoint is not connected)

我需要知道应用程序缺少哪个网络连接。

假设我可以使用gdb附加到进程,我如何打印0x7f1699ddfb60指向的truct sockaddr *(man getpeername)变量的值?

您可以通过执行来"向下转换"和取消引用指针(或其值)

(gdb) p *((struct sockaddr_in_or_whichever_you_use *) pointer_to_struct_sockaddr)

(gdb) p *((struct sockaddr_in_or_whichever_you_use *) 0x7f1699ddfb60)