В настоящее время я пытаюсь развернуть сетевое приложение, написанное на 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
Как я могу напечатать значение truct sockaddr *
(имя человека) переменная 0x7f1699ddfb60
указывает на?
Вы можете «уменьшить» и разыменовать указатель (или его значение), выполнив
(gdb) p *((struct sockaddr_in_or_whichever_you_use *) pointer_to_struct_sockaddr)
или же
(gdb) p *((struct sockaddr_in_or_whichever_you_use *) 0x7f1699ddfb60)
Других решений пока нет …