Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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_Debugging - Fatal编程技术网

Java “代码编写技术和最佳实践”;下拉框“;调试?

Java “代码编写技术和最佳实践”;下拉框“;调试?,java,debugging,Java,Debugging,假设我正在开发一个软件,它必须通过Web平台的API检索大量数据,并且API调用每天都是有限的 软件必须: 使用1000个API请求从平台下载记录(限制为5000) 比较SQL数据库中下载的记录 使用API更新webplatform,例如发出其他1000个请求 当我在调试时,我不能每次发现bug都重新运行软件,否则我一天只能测试两三次 假设我有检索所有记录以进行测试(例如,我无法导出下载的内容并在下次运行时导入并保存API请求),我希望在不丢失会话期间下载的记录的情况下调试软件一次,并且不停

假设我正在开发一个软件,它必须通过Web平台的API检索大量数据,并且API调用每天都是有限的

软件必须:

  • 使用1000个API请求从平台下载记录(限制为5000)
  • 比较SQL数据库中下载的记录
  • 使用API更新webplatform,例如发出其他1000个请求
当我在调试时,我不能每次发现bug都重新运行软件,否则我一天只能测试两三次

假设我有检索所有记录以进行测试(例如,我无法导出下载的内容并在下次运行时导入并保存API请求),我希望在不丢失会话期间下载的记录的情况下调试软件一次,并且不停止调试会话

我想到的唯一方法是在我的软件的主要部分添加断点,并在我必须后退时使用删除帧

我通常就是这样做的 MainClass.java 这种技术允许我在不停止调试的情况下重新编写代码片段

例如,如果
Comparator
类中存在任何问题,我可以在该类中进行所需的所有修改,重新编译它,删除帧(在本例中)
Comparator.compareRecords()
和“后退”在上一个类
main类
中,不丢失通过API下载的记录,然后进入
比较器类的重新编译版本

这是可行的,但结果是有一个非常大的类,只是为了调试,最后,我将不得不将所有的类连接在一起

有更好的方法吗?

--


编辑:我使用Intellij IDEA

我会模拟API或使用虚拟数据设置测试服务器,这样我就不必经历所有这些。这是标准实践,虽然可能无法解决所有问题,但它实际上会让您完成大量工作。我还将避免执行整个应用程序来调试比较器。编写单元测试。
public class MainClass {
    public static void main(String args[]){
        // ...
        ArrayList<HashMap<String, String>> records = MyApiHandler.getRecords();
        Comparator.compareRecords(records); // breakpoint here
    }
}
public class Comparator {
    public static void compareRecords(ArrayList<HashMap<String, String>> records){
        // ... after comparation, I have a "Result result"
        UploadResults.uploadResults(result); // breakpoint here
    }
}
public class UploadResults {
    public static void uploadResults(Result result){
        // ...
        MyApiHandler.updateRecords(result); // breakpoint here
    }
}