GDB: вывести значение указателя sockaddr

В настоящее время я пытаюсь развернуть сетевое приложение, написанное на 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 указывает на?

0

Решение

Вы можете «уменьшить» и разыменовать указатель (или его значение), выполнив

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

или же

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]