在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来安装必备组件。工作没有任何打!!