Function systemtap用户空间函数跟踪 我有一个简单的C++程序>/P>

Function 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的值,而不是它的地址。请向

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的值,而不是它的地址。请向
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)) : ""))