在java中,当本机方法(直接或间接)调用某个linux系统调用时,如何能够触发断点?
最佳答案
这不完全是一个断点,但至少它提供了一个堆栈跟踪,这可能是您所需要的全部。此外,如果需要的话,systemtap语言确实允许您做更多的事情,而不仅仅是打印堆栈跟踪。
在icedtea jvm源代码中,您将发现一个SystemTap file函数,该函数可用于从正在运行的icedtea(带热点)jvm获取堆栈跟踪。据我所知,使用这些函数,您可以从systemtap支持的任何事件(甚至从内核事件中)获取java堆栈跟踪。
注意,尽管这些jstack函数的名称相同,但它们与jdk提供的jstack(1)命令行实用程序无关。它们通过内存检查工作,而不是通过调用jvm工作,因此它们quite specific to Hotspot internals,因此可能无法与非基于热点的jvm一起工作。
注意:Systemtap does not fully work on default Debian kernels,因此您可能需要在基于debian的系统上编译自己的内核。这个问题不影响软呢帽或红帽。