linux mmap 头文件,linux – mmap()失败:无法分配内存 – 我如何找出谁在抱怨?...

mmap()失败,突然出现在我的.xsession错误中.但是没有迹象表明它失败了什么应用程序.事件发生后我该如何看待它?我通常只在偶尔切换到我的“tail -f .logs / *”工作区时发现故障.

解决方法:

你可以使用SystemTap来做这类事情.

>首先,设置您的系统.您需要SystemTap,与正在运行的内核对应的标头,以及相同的调试符号.在Debian上,让它工作是这样的:

sudo apt-get install systemtap

sudo apt-get install linux-headers-$(uname -r)

sudo apt-get install linux-image-$(uname -r)-dbg

让它工作可能有点棘手,因为内核头文件和符号需要完全匹配正在运行的内核.希望它在Gentoo上很简单.

>然后,将此文件另存为mmap.stp:

#! /usr/bin/env stap

# -*- systemtap -*-

global last_args

probe syscall.mmap2 {

last_args[tid()] = argstr;

}

probe syscall.mmap2.return {

errno = errno_p(returnval())

if (errno != 0) {

printf("%s[%d] mmap2(%s) failed: %d (%s)\n",

execname(), pid(), last_args[tid()],

errno, errno_str(errno));

}

}

probe begin {

printf("begin\n");

}

probe end {

printf("end\n");

}

>运行它

sudo stap mmap.stp

在编译和打印开始之后,它将监视每个mmap()系统调用并保存其参数.如果发生错误,您将获得包含程序名称,进程ID,参数和错误代码的输出.例如,运行这个荒谬的程序:

int main() {

mmap(1,-1,123,0,1,0);

}

给出SystemTap输出:

test[9601] mmap2(0x1, 4294967295, PROT_READ|PROT_WRITE|PROT_SEM|0x70, 0x0, 1, 0) failed: 22 (EINVAL)

标签:gentoo,linux,process,logs

来源: https://codeday.me/bug/20190810/1640681.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值