首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SystemTap似乎给出了不相关的输出

SystemTap似乎给出了不相关的输出
EN

Stack Overflow用户
提问于 2018-06-12 21:10:27
回答 1查看 163关注 0票数 8

我的系统是Ubuntu,uname -r = 4.15.0-23-generic。我已经为内核安装了调试符号。

我的问题是:

我正在尝试使用socket(AF_PACKET, SOCK_DGRAM, 0)进行传输。对于sendto(fd, 0,0,0,0,0) syscall,我有EINVAL (无效参数),我正在试图调查原因。

因此,为了找出返回EINVAL的内容,我使用了SystemTap。下面的脚本通过tpacket_snd函数的语句跟踪执行语句。

我的探测程序: info.stp

代码语言:javascript
复制
probe kernel.statement("tpacket_snd@*:*") {
    tokenize(pp(),"@");
    printf("HIT %s\n", tokenize("","@"))
}

下面是用于实现这种传输的sudo stap info.stp的输出:

代码语言:javascript
复制
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2619")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2627")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2628")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2636")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2638")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2640")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2641")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2656")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2659")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2658")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2662")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2663")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2669")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2671")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2674")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2672")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2675")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2680")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2688")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2692")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2694")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2693")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2706")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2710")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2707")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2708")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2709")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2712")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2743")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2728")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2736")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2735")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2785")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2787")
HIT /build/linux-uT8zSN/linux-4.15.0/net/packet/af_packet.c:2789")

packet.c#L2618]

我的问题是:输出与源代码无关(不匹配),因为:

  1. 首先指出行af_packet.c:2707是在2710 2710不包含跳转指令后执行的。
  2. 第二,根据我的调查,我可以推断出这样的情况: 2741-2745线。 如果(po->has_vnet_hdr & virtio_net_hdr_to_skb(skb,vnet_hdr,vio_le(){ tp_len = -EINVAL;goto tpacket_error;} 被计算为真-注意到执行了第2743行的SystemTap点。但是,从另一个角度,我用SystemTap研究了po->has_vnet_hdr等于0,所以如果body不可能执行。然而,SystemTap指出了这一点。

我的问题是:

怎么修理它,还是我弄错了?

EN

回答 1

Stack Overflow用户

发布于 2018-08-03 23:20:15

Q1:彼得说得很对。在编译器优化之后,源行可能以非线性顺序执行,因为不同C语句的指令混合在一起。这并不代表问题。

Q2:要知道是哪条语句导致了-EINVAL返回,我将合并语句探测(除了打印$$vars以查看局部变量之外)(函数.call/.return探测对),以注意函数何时离开。返回前的最后几条语句跟踪行将是我查找原因的地方。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50825868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档