Я работаю над написанием собственного отладчика с JDI для проекта uni. С помощью этого отладчика я хочу регистрировать выполненные строки кода и атрибуты целевой программы. Позже я хочу визуализировать файл журнала.
Я довел отладчик до точки, где он регистрирует строки и значения атрибутов, но застревает, когда я отлаживаю консольное приложение Java, и консольное приложение ожидает ввода в cmd, потому что у меня нет возможности ввести ввод.
Теперь немного кода:
Это та часть, где мой отладчик застревает
public static void options() throws IOException {
System.out.println("Choose an Option:");
System.out.println("Type \"count\" to start the counting function.");
System.out.println("Type \"vowels\" to count the vowels of a String.");
System.out.println("Type \"consonants\" to count the consonants of a String.");
System.out.println("Type \"both\" to count vowels and consonants.");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String entry = reader.readLine();
Когда отладчик достигает reader.readline (), он застревает, потому что отлаженная программа ожидает ввода, но я не могу переслать ему ввод, потому что мой cmd запускает программу отладчика, а отладчик не обрабатывает ввод.
Это основной метод моего отладчика:
VirtualMachine vm = null;
try {
vm = log.connectAndLaunchVM();
log.enableClassPrepareRequests(vm);
EventSet eventSet;
while ((eventSet = vm.eventQueue().remove()) != null){
for (Event e : eventSet){
if(e instanceof ClassPrepareEvent) {
log.handleClassPrepareEvents(vm, (ClassPrepareEvent) e);
}
if(e instanceof StepEvent){
log.printLocalVariables((StepEvent) e);
}
vm.resume();
}
}
}catch (VMDisconnectedException e){
System.out.println("VM disconnected.");
} catch (Exception e){
e.printStackTrace();
Я подумал о двух возможных решениях:
- Откройте целевой отладчик в его собственном окне cmd.
- Каким-то образом позволить отладчику пересылать и получать входные и выходные данные отладчика
Я пробовал заставить его работать с vm. process .getInputStream () и .getOutputS tream (), но не смог заставить его работать должным образом, потому что я не знал, где обрабатывать getOutputStream в моем отладчике.
Заранее благодарим за любые ответы и советы о том, как это сделать! Если у вас возникнут вопросы по моему вопросу, я с радостью отвечу на них.