我有一个在 Solaris 10 上运行的进程,由于 SIGSEGV 而终止。由于各种无趣的原因,我不可能通过通常的方式获得回溯(gdb、回溯调用、corefile 都出来了)。但我认为 dtrace 可能有用。
如果是这样,我想编写一个 dtrace 脚本,该脚本将在进程被终止时打印进程的线程堆栈。我对 dtrace 不是很熟悉,但这对于知道它的人来说似乎很容易。我希望能够以监视特定进程的方式运行它。有什么想法吗?
我有一个在 Solaris 10 上运行的进程,由于 SIGSEGV 而终止。由于各种无趣的原因,我不可能通过通常的方式获得回溯(gdb、回溯调用、corefile 都出来了)。但我认为 dtrace 可能有用。
如果是这样,我想编写一个 dtrace 脚本,该脚本将在进程被终止时打印进程的线程堆栈。我对 dtrace 不是很熟悉,但这对于知道它的人来说似乎很容易。我希望能够以监视特定进程的方式运行它。有什么想法吗?
万一其他人偶然发现了这一点,我正在使用我拼凑的以下脚本在 OS X 上进行一些实验:
#!/usr/sbin/dtrace -s
proc:::fault
/pid == $1/
{
ustack();
}
当我有一个完整的解决方案时,我会更新它。
几个 Solaris 工程师编写了一个使用 Dtrace 捕获崩溃数据的脚本,并发表了一篇关于使用它的文章,现在可以在Oracle 技术网找到这篇文章:使用 DTrace 启用用户控制的应用程序崩溃数据收集。
其中一位作者还发布了他的博客的一些更新,仍然可以在https://blogs.oracle.com/gregns/上阅读,但自从他 2007 年去世以来,没有任何进一步的更新。