【问题标题】:gdb: print sockaddr pointer valuegdb:打印 sockaddr 指针值
【发布时间】:2016-03-29 17:18:24
【问题描述】:

目前我正在尝试部署一个用 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) 变量的值?

【问题讨论】:

  • "downcast" 并通过 p *((sockaddr_in_or_whichever_you_use *) pointer_to_struct_sockaddr) 或 p *((sockaddr_in_or_whichever_you_use *) 0x7f1699ddfb60) 取消引用它
  • @cad (gdb) x 0x7f1699ddfb60 0x7f1699ddfb60: 0x00000002 - 它看起来像整数,但不是一个漂亮的打印结构:(
  • @alk 谢谢,请发表答案,我愿意接受

标签: c++ c gdb strace


【解决方案1】:

您可以通过执行“向下转换”并取消引用指针(或其值)

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

或

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 2018-02-17
    • 1970-01-01
    • 2011-01-29
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多