我很难诊断在sqlite3中抛出的分段错误。我可以将入口点缩小到我的代码上的单个查询,之后堆栈永远不会返回到我的代码并在sqlite3中爆炸。
我理解这可能不是sqlite3的问题,但是根据给出的消息和堆栈跟踪,我不知道从哪里开始。
我的代码 -
private Session GetCurrentSession()
{
return Database.Query<Session>("select * from Session").FirstOrDefault();
}
从我的代码的最后一次调用开始堆栈跟踪 -
线程0名称:tid_a0b调度队列:com.apple.main-thread 线程0崩溃:
0 libsystem_kernel.dylib 0x23d86c5c __pthread_kill + 8
1 libsystem_pthread.dylib 0x23e30732 pthread_kill + 62
2 libsystem_c.dylib 0x23d1b0ac abort + 108
3 MyMobileAppiOS 0x0011e834 mono_handle_native_sigsegv(mini-exceptions.c:2420)
4 MyMobileAppiOS 0x0012612c mono_sigsegv_signal_handler(mini-runtime.c:2875)
5 libsystem_platform.dylib 0x23e2a076 _sigtramp + 42
6 libsqlite3.dylib 0x2453cc34 0x2451d000 + 130100
7 libsqlite3.dylib 0x2453cc34 0x2451d000 + 130100
8 libsqlite3.dylib 0x2453cb4a 0x2451d000 + 129866
9 libsqlite3.dylib 0x2452809a 0x2451d000 + 45210
10 libsqlite3.dylib 0x245269e2 0x2451d000 + 39394
11 libsqlite3.dylib 0x24526128 0x2451d000 + 37160
12 libsqlite3.dylib 0x24525aa4 0x2451d000 + 35492
13 libsqlite3.dylib 0x2452583e 0x2451d000 + 34878
14 libsqlite3.dylib 0x24567e50 sqlite3_prepare_v2 + 44
15 MyMobileAppiOS 0x00a2bba0 wrapper_managed_to_native_SQLitePCL_SQLite3Provider_default_NativeMethods_sqlite3_prepare_v2_intptr_byte___int_intptr__intptr_(/:1)
16 MyMobileAppiOS 0x00a1c754 SQLitePCL_SQLite3Provider_default_SQLitePCL_ISQLite3Provider_sqlite3_prepare_v2_intptr_string_intptr__string_(/:1)
17 MyMobileAppiOS 0x00a18aa8 SQLitePCL_raw_sqlite3_prepare_v2_SQLitePCL_sqlite3_string_SQLitePCL_sqlite3_stmt__string_(/:1)
18 MyMobileAppiOS 0x00a189f8 SQLitePCL_raw_sqlite3_prepare_v2_SQLitePCL_sqlite3_string_SQLitePCL_sqlite3_stmt_(/:1)
19 MyMobileAppiOS 0x009ec278 SQLite_SQLite3_Prepare2_SQLitePCL_sqlite3_string(SQLite.cs:3322)
20 MyMobileAppiOS 0x009e5e00 SQLite_SQLiteCommand_Prepare(SQLite.cs:2289)
21 MyMobileAppiOS 0x009e750c SQLite_SQLiteCommand__ExecuteDeferredQueryc__Iterator0_1_T_REF_MoveNext(SQLite.cs:2201)
22 MyMobileAppiOS 0x002a0db8 System_Collections_Generic_List_1_T_REF__ctor_System_Collections_Generic_IEnumerable_1_T_REF + 596
23 MyMobileAppiOS 0x005b0ae4 System_Linq_Enumerable_ToList_TSource_REF_System_Collections_Generic_IEnumerable_1_TSource_REF(Enumerable.cs:861)
24 MyMobileAppiOS 0x009e58c8 SQLite_SQLiteCommand_ExecuteQuery_T_REF(SQLite.cs:2170)
25 MyMobileAppiOS 0x009debb0&gt; SQLite_SQLiteConnection_Query_T_REF_string_object __(SQLite.cs:711)
26 MyMobileAppiOS 0x009c4344 MyMobileAppiOS_SQLiteAccess_Repository_SqlSessionRepository_GetCurrentSession(SqlSessionRepository.cs:35)
应用程序启动时会调用此行。该应用程序在50%的时间内崩溃。我理解给出的可能不足以解决问题,但我希望从堆栈跟踪中调用某人可以指导我可能导致此问题的方向。
修改 -
看起来这不仅限于此查询,并且可以随时调用Database.Query
。
答案 0 :(得分:0)
很难找到这个问题。但也许这会帮助那些偶然发现同样错误的人。
在其中一个查询中,列名称不正确。
是错误,而不是错误的列名称错误。要跟踪此问题,我们必须在调试器捕获错误之前使大多数异步任务同步运行。显然在iOS中,如果线程失败,整个应用程序都会失败。在android中,它只是忽略它并继续前进。
检查您的查询并确保您没有引用不存在的列。