Pytanie - da się debugować kod java z poziomu gdb? Mam 2 konsole, w jednej sobie leci program w pętliw, w drugiej gdb. Próbuję wpiąć się do procesu w linuxie takimi komendami
gdb // uruchamia się gdb
!pidof java // szukam pid procesu mojej aplikacji
set non-stop on // zmieniam tryb żeby nie zatrzymywało wszystkich wątków
attach 82448 // czyli podłączam się pod proces np o pid 82448
jak dam info threads
widzę jakieś 15 wątków, w tym kompilatory c1, c2 itp. I zatrzymuje się gdzieś poza wątkiem Main, tylko gdzieś w pthread_join.c:92
. Jak dam disassemble
to widzę kod tego pthread_join. I wszystkie wątki są zatrzymane mimo że dałem set non-stop on jako root. A jak wpiszę continue &
to pokazuje Asynchronous execution not supported on this target.
. Idzie jakoś debugować kod java przez gdb podpinając się pod proces ? nawet jak dam samo continue
to potem już nie ruszy, zatrzymane jest wszystko i tylko wyjście z gdb wznowi wykonywanie programu dalej.
Niech bedzie że to jest ta aplikacja. Proces java jaki uruchamiam.
public class Main {
private static volatile int val = 0;
public static void main(String[] args) throws InterruptedException{
while(true) {
System.out.format("%d \n", val);
setVal();
Thread.sleep(100);
}
}
public static void setVal() {
val++;
}
}
Linux Ubuntu 14.04LTS, Intel i3 2220, gdb GNU gdb (Ubuntu 7.7.1-0ubuntu514.04.3) 7.7.1, java openjdk version "1.8.0_222" OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-114.04-b10) OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
jdb
to debugowanie w IDE nadal będzie działać.