在ubuntu上安装systemtap之后,测试示例hello-stap.stp。但是有一些错误。

我怎样才能解决这个问题?

谢谢

systemtap版本


  Systemtap翻译器/驱动程序(版本2.9 / 0.165,Debian版本2.9-2ubuntu2(xenial))
  
  版权所有(C)2005-2015 Red Hat,Inc.和其他
  
  这是免费软件;请参阅复制条件的来源。
  
  启用的功能:AVAHI LIBSQLITE3 NLS NSS TR1_UNORDERED_MAP


hello-stap.stp

probe begin
{
    print("hello world\n")
    exit()
}


这是错误信息。

错误1:


  在/usr/share/systemtap/runtime/linux/runtime.h:204:0包含的文件中,
                          从/usr/share/systemtap/runtime/runtime.h:24,
                          来自/tmp/stapd8LhT7/stap_24feca2d4e5abb002d28b0bc184e6d61_945_src.c:25:
          /usr/share/systemtap/runtime/linux/access_process_vm.h:在函数__access_process_vm_中:
          /usr/share/systemtap/runtime/linux/access_process_vm.h:35:29:错误:传递“ get_user_pages”的参数1使指针的整数不进行强制转换[-Werror = int-conversion]
              ret = get_user_pages(tsk,mm,addr,1,write,1,&page,&vma);
                  ^

最佳答案

我自己遇到了这个问题。简而言之,Ubuntu的systemtap软件包当前已过期。

说明:前一段时间,内核更新了get_user_pages()函数,这意味着使用以前的函数原型的任何东西现在都无法编译。这也发生在VMWare的vmmon和vmnet模块上。运行stap时,它将生成一个使用get_user_pages()的内核模块源文件,对其进行编译并将其加载到内核中。但是它生成的C代码使用旧的函数定义,因此无法构建。

目前尚无解决方案:您可以从源代码构建SystemTap(虽然我做不到,但我也没有很努力),也可以告诉Ubuntu升级其损坏的systemtap软件包-我提交了bug report,也许您可​​以确认。

我的解决方案是切换到Fedora 26并运行/ usr / bin / stap-prep来安装必备组件。工作没有任何打!!

08-28 14:19