Function systemtap用户空间函数跟踪 我有一个简单的C++程序>/P>
main.cppFunction systemtap用户空间函数跟踪 我有一个简单的C++程序>/P>,function,arguments,trace,systemtap,Function,Arguments,Trace,Systemtap,main.cpp #include <iostream> using namespace std; int addition (int a, int b) { int r; r=a+b; return r; } int main () { int z; z = addition (5,3); cout << "The result is " << z; } 这似乎是一个systemtap错误。它应该打印b的值,而不是它的地址。请向
#include <iostream>
using namespace std;
int addition (int a, int b)
{
int r;
r=a+b;
return r;
}
int main ()
{
int z;
z = addition (5,3);
cout << "The result is " << z;
}
这似乎是一个systemtap错误。它应该打印b的值,而不是它的地址。请向
systemtap@sourceware.org
邮件列表(带有编译器/etc.版本和其他信息,如man error::reporting
中所述)
至于更改脚本,$$parms
部分是将局部变量转换为漂亮的打印字符串的地方
trace(1, $$parms . (@defined($foobar) ? (" foobar=".$foobar$) : ""))
要将foobar=XYZ
附加到跟踪记录,其中有一个参数foobar
。要解决有问题的systemtap错误,您可以尝试
trace(1, $$parms . (@defined($b) ? (" *b=".user_int($b)) : ""))
要将
b
变量作为int*
变量来取消引用,您使用的是哪个版本的G++/SystemTap?您的代码对我来说运行良好。请注意,SystemTap依赖GCC提供的DWARF信息来显示变量,GCC>5.0版本已将DWARF切换到版本4。您能给我Centos 7的DWARF链接吗(3.10.0-229.14.1.el7.x86_64)Systemtap转换器/驱动程序(版本2.6/0.160,rpm 2.6-10.el7_1)gcc(gcc)4.8.3 20140911(红帽4.8.3-9)
How to modify my stap script?
trace(1, $$parms . (@defined($foobar) ? (" foobar=".$foobar$) : ""))
trace(1, $$parms . (@defined($b) ? (" *b=".user_int($b)) : ""))