Я пытаюсь построить GUI для G CC, который имеет некоторые базовые c функции, такие как компиляция, компоновка, выполнение, отладка и т. Д. c для программ на C ++ с использованием Java. Я создаю строки команд, которые я передаю ProcessBuilder и запускаю из командной строки и G CC.
command = "cd src & cd Resources & g++ " + compileFile.cpp +" -Wall "+ " -o "+ "tempOut";
Это пример кода для компиляции файла.
Часть это функциональность отладки, для которой я использую GDB. Теперь проблема в том, что GDB требуется дополнительный ввод для добавления точек останова, удаления точек останова и так далее. У меня возникли проблемы с передачей этих необходимых входов в GDB через терминал Java. Если я передаю команды в командной строке, она работает нормально, и я получаю желаемый результат. введите описание изображения здесь
Но всякий раз, когда я запускаю команду GDB из программы Java, я не могу передавать какие-либо входы с терминала IDE. Я знаю, что каждая команда GDB использует свой процесс, и я пытался присоединить идентификатор процесса Java к GDB, но я просто получил пустую консоль вывода. Кажется, что сеанс GDB начался, но нет возможности взаимодействовать с этим процессом через выходную консоль IDE.
int pid = Integer.parseInt(ManagementFactory.getRuntimeMXBean().getName().split("@")[0]);
command = "gdb attach "+ pid;
fireCommand();
EDIT
Это метод который взаимодействует с командной строкой для получения ввода и отображения вывода в консоли вывода IDE:
public void fireCommand() {
String line;
String os = System.getProperty("os.name");
ProcessBuilder builder;
if(os.startsWith("Win")) {
builder = new ProcessBuilder("cmd.exe", "/c", command);
}
else{
builder = new ProcessBuilder("bash", "-c", command);
}
try {
process = builder.start();
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
while ((line = reader.readLine()) != null) {
if(line.contains("Input the value")) {
//any other user input in non debug execution
String value = JOptionPane.showInputDialog(line);
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(process.getOutputStream()));
writer.write(value, 0, value.length());
writer.newLine();
writer.close();
}
else {
output.append(line).append("\n");
}
}
int exitVal = process.waitFor();
if (exitVal == 0) {
//display("Success!");
display(output.toString());
} else {
String lineErr;
BufferedReader readerErr = new BufferedReader(
new InputStreamReader(process.getErrorStream()));
while ((lineErr = readerErr.readLine()) != null) {
outputErr.append(lineErr).append("\n");
}
//display(exitVal);
display(outputErr.toString()); //Display the uncatched errors
}
} catch (IOException e) {
display("There was a problem with the I/O");
e.printStackTrace();
} catch (InterruptedException e) {
display("There was a interruption with the execution");
e.printStackTrace();
}
if(!outputErr.toString().isEmpty())
errorFormatDisplay(); //display Error output function
}
Любые выводы по этому вопросу были бы очень полезны. Спасибо.