我收到了我的iOS应用程序的崩溃报告,其中异常类型为Sub ExampleCall()
' [1] Identify source range
Dim src As Range
Set src = ThisWorkbook.Worksheets("MySheet").Range("A1:D2")
' [2] define any target, e.g. 1 column to the right of source data
Dim target As Range, r&, c&
r = src.Rows.Count: c = src.Columns.Count
Set target = src.Offset(0, c + 1).Resize(r, c * 2) ' reserve double space for columns
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' [3] write redoubled source range columns back to target
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RedoubleCols src, target
End Sub
,异常代码为SIGILL
,这是我从未见过的。
我只能在ILL_ILLTRP
中找到有关ILL_ILLTRP
的唯一信息:
signal.h
在iOS(以及Swift或Obj-C)上,什么会导致“非法陷阱”的发生?
作为参考,这是崩溃线程的堆栈跟踪:
/*
* When the signal is SIGILL or SIGFPE, si_addr contains the address of
* the faulting instruction.
* When the signal is SIGSEGV or SIGBUS, si_addr contains the address of
* the faulting memory reference. Although for x86 there are cases of SIGSEGV
* for which si_addr cannot be determined and is NULL.
* If the signal is SIGCHLD, the si_pid field will contain the child process ID,
* si_status contains the exit value or signal and
* si_uid contains the real user ID of the process that sent the signal.
*/
/* Values for si_code */
/* Codes for SIGILL */
#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
#define ILL_NOOP 0 /* if only I knew... */
#endif
#define ILL_ILLOPC 1 /* [XSI] illegal opcode */
#define ILL_ILLTRP 2 /* [XSI] illegal trap */
#define ILL_PRVOPC 3 /* [XSI] privileged opcode */
#define ILL_ILLOPN 4 /* [XSI] illegal operand -NOTIMP */
#define ILL_ILLADR 5 /* [XSI] illegal addressing mode -NOTIMP */
#define ILL_PRVREG 6 /* [XSI] privileged register -NOTIMP */
#define ILL_COPROC 7 /* [XSI] coprocessor error -NOTIMP */
#define ILL_BADSTK 8 /* [XSI] internal stack error -NOTIMP */
答案 0 :(得分:2)
我试图了解发生了什么。我没有解决方案,但是有一些想法:
堆栈跟踪(第0行)表示崩溃是在第73行的CocoaLumberjack
快速代码中,应使用{来访问Bool
var
asyncLoggingEnabled
{1}}。
显然,这是指令
unsafeMutableAddressor
此代码在第73行。
我相信可以使用public var asyncLoggingEnabled = true
(docs)访问此var
。这里的应用是
...负责处理您使用的任何内存的生命周期 通过不安全的指针来避免泄漏或未定义的行为。
特别是
许多指针操作只能应用于具有内存的指针 在特定状态下-您必须跟踪内存的状态 正在合作并了解对该状态的更改, 执行不同的操作。内存可以是无类型的和未初始化的, 绑定到类型并初始化,或者绑定到类型并初始化 值。最后,先前分配的内存可能具有 被释放,留下引用未分配的现有指针 记忆。
我相信您的应用程序崩溃是因为用于访问UnsafeMutablePointer
的指针指向了处于非法状态的内存。
如果发生这种情况,应该执行系统陷阱以处理这种情况,但是只有在安装了针对此类异常的陷阱处理程序后才能执行。如果不是这种情况,则会执行非法陷阱(异常代码:ILL_ILLTRP),以处理所有未处理的陷阱。
取决于执行历史记录,内存可能也可能处于合法状态。因此,崩溃可能会发生或不会发生。
简而言之,我认为这是asyncLoggingEnabled
中的错误。