2016-03-29 8 views
0

Aktuell in C++ geschrieben, ich versuche, eine Netzwerk-Anwendung zu implementieren und es sieht aus wie es aufgrund von Netzwerkproblemen in Endlosschleife fällt:GDB: print sockaddr Zeigerwert

[[email protected] ~]$ 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) 

Ich muss wissen, mit welchem ​​Netz Verbindung fehlt der Anwendung.

Assumming daß ich mit gdb dem Prozess anhängen können, wie kann ich den Wert von a truct sockaddr * (man getpeername) variable dass 0x7f1699ddfb60 Punkte zu drucken?

+0

Untersuchen Sie mit 'X'? – Downvoter

+1

"gesenkten" und dereferenzieren von 'p * tun ((sockaddr_in_or_whichever_you_use *) pointer_to_struct_sockaddr)' oder 'p * ((sockaddr_in_or_whichever_you_use *) 0x7f1699ddfb60)' – alk

+0

@cad '' '(GDB) x 0x7f1699ddfb60 0x7f1699ddfb60: \t 0x00000002' '' - Es sieht wie Ganzzahl aus, aber nicht eine hübsche gedruckte Struktur :( –

Antwort

3

Sie könnten "gesenkten" und den Zeiger dereferenzieren (oder dessen Wert) von

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

oder

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