SQLite3 iOS分段错误(Xamarin)

时间:2016-11-15 16:17:34

标签: ios xamarin sqlite xamarin.ios

我很难诊断在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

1 个答案:

答案 0 :(得分:0)

很难找到这个问题。但也许这会帮助那些偶然发现同样错误的人。

在其中一个查询中,列名称不正确。

是错误,而不是错误的列名称错误。

要跟踪此问题,我们必须在调试器捕获错误之前使大多数异步任务同步运行。显然在iOS中,如果线程失败,整个应用程序都会失败。在android中,它只是忽略它并继续前进。

检查您的查询并确保您没有引用不存在的列。