我正在尝试使用跟踪来调试我的代码中的一些SQLite查询,以便将发生的所有事情记录到控制台中,但似乎几乎没有关于它的信息 - 在谷歌搜索“sqlite3_trace_v2 swift”只返回两页结果,除了上面的链接外,都没有帮助。使用以下代码,我至少能够运行跟踪回调函数:
func traceSQL (database: OpaquePointer?) {
var pointer: OpaquePointer?
func traceCallback (mask: UInt32, pointer: UnsafeMutableRawPointer?, query: UnsafeMutableRawPointer?, result: UnsafeMutableRawPointer?) -> Int32 {
print("SQLite Trace:")
if let query = query?.load(as: UnsafePointer<Int8>.self) {
print(String(cString: query))
} else {
print("Could not load query.")
}
if let result = result?.load(as: UnsafePointer<Int8>.self) {
print(String(cString: result))
} else {
print("Could not load result.")
}
return 0
}
sqlite3_trace_v2(database, 15, traceCallback as @convention(c) (UInt32, UnsafeMutableRawPointer?, UnsafeMutableRawPointer?, UnsafeMutableRawPointer?) -> Int32, &pointer)
}
但我不知道该如何处理函数的输出 - 目前,它仅打印出一串无法读取的字符,而我的先前尝试甚至都未能成功。我怀疑问题的一部分是因为我不知道如何在Swift中使用UnsafeMutableRawPointer
(还有其他缺乏相关信息的内容)。
简而言之:我该如何记录SQLite的跟踪结果?