Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有可能让一个程序运行另一个程序(.java文件)的代码并自动调试每一行_Java_Multithreading_Debugging - Fatal编程技术网

有没有可能让一个程序运行另一个程序(.java文件)的代码并自动调试每一行

有没有可能让一个程序运行另一个程序(.java文件)的代码并自动调试每一行,java,multithreading,debugging,Java,Multithreading,Debugging,例如,假设我希望有一个通用程序,它创建一个线程,从JFileChooser中指定的.java文件运行代码,并逐行或一直运行到某一行,然后打印调试器中的每个更改,或者至少打印一个类似的函数(即打印数据结构和变量内部的值). 写出来的时候,这听起来像是一个普通的IDE或者我自己运行调试就可以得到的东西,但是假设我想要一种更简单的调试方法,而不是自己完成每一步,查看调试器,向下滚动,展开我想检查的值,然后再向下滚动,等等。大多数情况下,当我调试时,我得到了很多我并不真正关心的信息,所以我只想限制所有

例如,假设我希望有一个通用程序,它创建一个线程,从JFileChooser中指定的.java文件运行代码,并逐行或一直运行到某一行,然后打印调试器中的每个更改,或者至少打印一个类似的函数(即打印数据结构和变量内部的值).

写出来的时候,这听起来像是一个普通的IDE或者我自己运行调试就可以得到的东西,但是假设我想要一种更简单的调试方法,而不是自己完成每一步,查看调试器,向下滚动,展开我想检查的值,然后再向下滚动,等等。大多数情况下,当我调试时,我得到了很多我并不真正关心的信息,所以我只想限制所有变量中的值,而不是它的属性等等

这似乎是一个相当大的项目,或者可能不是,实际上很简单。不管怎样,我想创建一个项目。。。 1. 具有运行指定.java文件的代码的线程

二,。 一个在第一个线程中打印值更改的线程(为了方便起见,我可以使用一个GUI,让它更新每个值和步骤,即(字符串[]名称=>[],[“Joe Shmoe”],[“Joe Shmoe”,“Kyle Stanly”],[]等)

三,。 能够逐行阅读,或者至少能够记录正在发生的变化,这样我就可以回去查看

四,。 抛出任何要查看的错误,例如,另一个包含stacktrace的文本框


我想知道这是否可行,如果可行,从何处开始。如果我成功地做到了这一点,它将帮助我调试我尝试的任何未来项目。

您无法调试.java文件。但是,您可以做的是编译这些文件并输出自定义诊断!诊断基本上是编译时获得的调试器输出。您的所有诊断都将存储在一个您甚至可以自己实现的数据库中(但您不必这样做)

你想了解的是这个实用程序。我认为Javadoc解释得很好,但是如果你发现它们不怎么样(就像我当年做的那样),你可以用谷歌搜索任何你不懂的东西。那里有很多例子和教程

这是我个人项目中的内容:

public boolean compile() {
    DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();

    try {
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        try (StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null)) {

            Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromFiles(classFiles);
            compiler.getTask(null, fileManager, diagnostics, compileOptions, null, compilationUnits).call();
        }
    } catch (IOException ex) {
        System.err.println("Compilation failed: " + ex.getMessage());
        return false;
    }

    System.out.println("Compilation finished.");

    // returns false if the diagnostics contain errors, and true if there are no
    // diagnostics or if all the diagnostics are warnings.
    return successfullCompilation(diagnostics.getDiagnostics());
}
公共布尔编译(){ DiagnosticCollector diagnostics=新建DiagnosticCollector(); 试一试{ JavaCompiler=ToolProvider.getSystemJavaCompiler(); try(StandardJavaFileManager fileManager=compiler.getStandardFileManager(null,null,null)){
Iterable您无法调试.java文件。但是,您可以做的是编译这些文件并输出自定义诊断!诊断基本上是编译时获得的调试器输出。您所有的诊断都将存储在一个甚至可以自己实现的文件中(不过,您不必这样做)

你想了解的是这个实用程序。我认为Javadoc解释得很好,但是如果你发现它们不怎么样(就像我当年做的那样),你可以用谷歌搜索任何你不懂的东西。那里有很多例子和教程

这是我个人项目中的内容:

public boolean compile() {
    DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();

    try {
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        try (StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null)) {

            Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromFiles(classFiles);
            compiler.getTask(null, fileManager, diagnostics, compileOptions, null, compilationUnits).call();
        }
    } catch (IOException ex) {
        System.err.println("Compilation failed: " + ex.getMessage());
        return false;
    }

    System.out.println("Compilation finished.");

    // returns false if the diagnostics contain errors, and true if there are no
    // diagnostics or if all the diagnostics are warnings.
    return successfullCompilation(diagnostics.getDiagnostics());
}
公共布尔编译(){ DiagnosticCollector diagnostics=新建DiagnosticCollector(); 试一试{ JavaCompiler=ToolProvider.getSystemJavaCompiler(); try(StandardJavaFileManager fileManager=compiler.getStandardFileManager(null,null,null)){
IterableWelcome to StackOverflow。由于您是新来的,请看一下帮助中心的“如何提出一个好问题:。我刚才确实回答了您的问题,但您应该学会如何使您的问题更易于理解和阅读(事实并非如此)。欢迎来到StackOverflow。由于您是新来的,请看一下帮助中心的“如何提出一个好问题:。我刚才确实回答了您的问题,但您应该学会如何使您的问题更易于理解和阅读(事实并非如此)。这实际上是…我非常需要的。我以后肯定会将javadocs与您的代码一起用作参考。但我有一个问题:虽然这会告诉您它是否编译良好,但如果它编译正确,是否有方法运行它?例如,这可以帮助我确定它是否编译正确,如果正确,则可以我运行它,是否有编译器存储的变量列表,以及这些引用中是否有我可以使用的值引用?@KyleStanly编译器自身生成的任何数据(即诊断)都可以在编译应用程序中访问。但是,如何访问和/或将数据发送到freshly编译的应用程序是一个完全不同的问题。这是
ClassLoader
Reflection
潜伏的领域,超出了我的专业知识范围。我建议您接受这个答案,尝试编写一个可以成功编译类文件的应用程序,然后回到这里来StackOverflow并询问一个新的问题当你的任务摆在面前时,你会得到更多的帮助:)事实上,这正是我所需要的。我以后肯定会将javadocs与您的代码一起用作参考。但我有一个问题:虽然这会告诉您它是否编译良好,但如果它编译正确,是否有办法运行它?比如,这可以帮助我确定它是否编译正确,如果正确,则可以我运行它,是否有编译器存储的变量列表,以及这些引用中是否有我可以使用的值引用?@KyleStanly编译器本身生成的任何数据(即诊断)都可以在编译应用程序中访问。但是,如何访问和/或将数据发送到利康比