虚假的dtrace用户堆栈跟踪?

时间:2015-07-09 21:08:23

标签: solaris solaris-10 dtrace

我正在使用dtrace来对这样的进程的堆栈跟踪进行采样:

# /usr/sbin/dtrace -p $MYPID -x ustackframes=100 stack.d -s -o stack.log

stack.d的样子:

profile-99
/execname == "mybinary"/
{
    @[execname, ustack()] = count();
}

我正在向-p添加dtrace,这样即使用户进程已经退出,它也会在堆栈写入期间显示符号。

这有效 - 但我发现了3个问题:

在跟踪期间,我会定期收到错误消息,例如:

dtrace: error on enabled probe ID 1 (ID 12345: profile:::profile-99):\
  invalid address (0x0) in action #3
dtrace: error on enabled probe ID 1 (ID 12345: profile:::profile-99):\
  invalid address (0xffffffff00000000) in action #3
dtrace: error on enabled probe ID 1 (ID 12345: profile:::profile-99):\
  invalid address (0x7ffe8000) in action #3
[..]

(即许多人)

那里的根本问题是什么?

该过程执行得如此(即没有崩溃)。

另一件事是很多记录的堆栈根本不包含任何符号。

这种无符号堆栈的可能原因是什么?

此外 - 某些堆栈不以_start -> main开头,但仍包含符号(即包含二进制函数)。

那些不完整的堆栈是dtrace以某种方式无法到达底部的吗?

0 个答案:

没有答案