Когда я запускаю этот код и граф вызовов действительно большой, программа печатает до последней строки, которую выводит opt
, и блокируется на readLine
, даже если ничего не осталось. Кто-нибудь знает, в чем проблема? opt -print-callgraph file
отправляет граф вызовов в поток ошибок. Я попытался выполнить opt -print-callgraph file 2> callgraph
, чтобы вместо этого читать из файла, но он жалуется, что слишком много позиционных аргументов.
Как ни странно, код отлично работает для графов вызовов небольшого размера.
Я также пытался использовать ProcessBuilder
, но у меня возникла та же проблема.
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("opt -print-callgraph " + file);
BufferedReader in = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String s = null;
try {
// Gets stuck at readLine after printing out the last line.
while ((s = in.readLine()) != null) {
System.out.println(s);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
in.close();
}