我正在调试一个相当复杂的问题,它只发生在特定情况下(为了论证,假设 10000 分之一(。我设法隔离了一个案例,但如果我执行代码,db 就会改变,我只有一次机会找到问题。
我可以 ofc 制作当前状态的快照并恢复到它,然后再次运行它(无法使用事务,因为有一些 MyISAM 表和其中某个地方的更改(。但这很耗时,而且公平地说有点令人沮丧。
因此,对我来说最好的解决方案是获取将要执行的查询列表并在那里停止脚本(理论上我应该能够从工作单元中获取这些查询,但找不到如何(。
那么......如何获取将运行的查询列表?
我认为SQLLogger就是你要找的。这记录了 Doctrine 在请求响应/文件/任何内容期间执行的所有查询。
https://www.doctrine-project.org/api/dbal/2.5/Doctrine/DBAL/Logging/SQLLogger.html
但是,查询将在数据库上执行。因此,您需要备份数据库并再次运行它,但至少您将有一个要调试的SQL查询列表,而不是"黑匣子"情况。