linux – SystemTap似乎给出了无关的输出
我的系统是Ubuntu,uname -r = 4.15.0-23-generic.我已经为内核安装了调试符号.
我的问题是:
因此,要找出返回EINVAL的内容,我正在使用SystemTap.下面的脚本跟踪tpacket_snd函数的语句执行语句. 我的探测程序:info.stp probe kernel.statement("tpacket_snd@*:*") { tokenize(pp(),"@"); printf("HIT %sn",tokenize("","@")) } 这是我执行这种传输的sudo stap info.stp的输出: 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") [https://elixir.bootlin.com/linux/v4.15/source/net/packet/af_packet.c#L2618] 我的问题是: >首先, >其次, if(po-> has_vnet_hdr&& virtio_net_hdr_to_skb(skb,vnet_hdr,vio_le())){ 评估了SystemTap指出第2743行已执行的真实情况.但是,从另一方面我已经用SystemTap调查过po-> has_vnet_hdr等于0所以如果是body则不可能执行.但是,SystemTap指出了它. 我的问题是: 如何修复它或我做错了什么? 解决方法
Q1:彼得是对的.在编译器优化之后,源行可能看起来以非线性顺序执行,因为不同C语句的指令是混合的.这不代表问题.
Q2:为了找出导致-EINVAL返回的语句,我将结合使用语句探测器(除了打印$$变量以查看局部变量之外)和函数.call / .return探测对,以便注意何时功能正在被搁置.在返回之前的最后几条语句跟踪线将是我寻找原因的地方. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |