我正在编写一些实用程序来帮助我调试一些棘手的代码。特别是,我有一个实用程序类,可以调用它来捕获一个断点,以响应动态条件,这些条件不能使用条件断点轻松捕获。用户必须在类中安装断点,这没有问题,但是有点烦人的话就是必须走出实用程序类到我每次都对调试感兴趣的地方。
有没有办法从调试的java进程内部访问调试器,所以一旦程序断点捕获我可以将它放在相关的行?在debugee流程中是否有调试器的接口?
我有一个带断点()方法的BreakpointHere类。在这个方法中,使用以下代码进行紧密循环:
/* ||==\\ ||==\\ ||===== //\\ || // || || ||===== ||==\\ ||===== || ||
* || \\ || \\ || // \\ || // || || || || \\ || || ||
* || // || // || || || || // || || || || // || || ||
* ||=== ||=== ||=== //====\\ ||// ||====|| ||=== ||=== ||=== || ||
* || \\ || \\ || // \\ || \\ || || || || \\ || || ||
* || || || \\ || || || || \\ || || || || \\ ||
* ||===// || \\ ||===== || || || \\ || || ||===== || \\ ||===== () ()
*
* The user should set a breakpoint on the following line */
/* \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ */
/* >>>> */ stack = Thread.currentThread().getStackTrace(); // <<<< Yeah, right here.
/* /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ */
// Good. If you're here, press step return now.
如果调用了breakpoint()方法并且没有安装断点,则该方法会打印一条消息,告诉用户程序已暂停,指示他们安装断点,并提供CLI选项以忽略并继续。如果安装了断点(在方法调用之前或暂停时),则会捕获断点。
我希望能够继续返回,以便调试光标位于实际调用BreakpointHere的代码中,而不是要求开发人员返回。