这是这个问题的必然结果。
我有一个Mac应用程序,它广泛使用sqlite。几个线程在sqlite代码中陷入僵局,而没有使用任何共享资源。我已经通过sqlite3_config函数设置了sqlite_config_log,并且不断收到代码为28的消息:
打开时重命名的文件:
代码28是SQLITE_WARNING。我发现似乎是记录该警告的源代码(在页面中搜索“打开时重命名的文件”),似乎应该为我提供了有问题的文件的路径,但这并没有通过日志语句。我什至在我的日志函数中设置了一个断点,并检查了“文件重命名”字符串的内存,并且那里没有文件名。它不仅因为错误的空字符而切断了日志。
我也知道我实际上没有重命名文件。在创建文件后立即向我发出此警告。相同的代码在iOS应用程序(与sqlite版本3.7.13链接,而Mac为3.8.5)上运行,而不会生成警告。因此,问题是:除了重命名文件之外,还有什么可能导致此警告?
更新:如果在对数据库运行任何语句之前将数据库转换为DELETE日志模式,则不会出现警告。
通过将最新版本的SQLite作为源捆绑到我的项目中,而不是与dylib链接,我能够解决此问题。这是sqlite中的某种错误,可能是由于以下原因引起的:由于我的应用程序如何管理文件,它在磁盘上创建了一个空文件,然后将其传递给sqlite以创建数据库文件(而不是将sqlite传递至一个空的位置)。我当前正在运行3.8.8.2; 我认为优胜美地捆绑的版本是3.7。iOS 8中使用了相同的版本,并在我的同伴iOS应用程序中引起了相同的问题。
注意:如果将sqlite捆绑到Xcode项目中,请确保已定义HAVE_USLEEP,否则它将整秒钟等待锁等待。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句