我正在寻找处理一个相当高级问题的具体建议:如何调试软件(如果您有兴趣,可以使用遗传算法):
- 跨多个线程运行任务(我不控制哪个线程运行哪个任务)
- 每个任务的执行取决于随机值(我不控制随机化种子)
- 任务的状态是一个复杂的对象图,不能轻易序列化为人类可读的平面格式
到目前为止,我已经尝试了以下方法:
在调试器中检查单个线程:这是有问题的,因为大多数任务都成功完成(在问题之前设置断点会导致许多误报)。另一方面,如果我设置了一个断点,一旦任务处于不良状态就停止,我无法及时退后一步来弄清楚我是如何到达那里的。
转储跟踪日志在理论上很好(一旦发现错误状态,我可以及时退回),但我还没有弄清楚如何将任务的状态序列化为平面的人类可读格式。
在理想的世界中,我希望能够为错误状态设置断点,然后使用调试器及时退回以检查我是如何到达这一点的。
你以前遇到过这种问题吗?你是怎么调试的?