Сбой с нулевой линией действительно странно.Но часто встречается в коде Swift.
Компилятор Swift может выполнять генерацию кода от вашего имени.Это может случиться довольно часто с общими функциями, но может случиться и по другим причинам.Когда компилятор генерирует код, он также создает отладочную информацию для кода, который он генерирует.Эта отладочная информация обычно ссылается на файл, который вызвал генерацию кода.Но компилятор помечает все это строкой 0
, чтобы отличить ее от кода, который был фактически написан разработчиком.
Эти универсальные функции также не должны быть написаны вами - я виделэто случается и со стандартными библиотечными функциями.
(Кроме того: я считаю, что стандарт DWARF, на самом деле, может описать эту ситуацию более точно. Но, к сожалению, Apple, похоже, не использует его таким образом.)
Apple проверила поведение линии на нуле с помощью радара, который я подал об этом несколько лет назад.Вы также можете просмотреть собственные данные отладки вашего приложения (например, через dwarfdump), если хотите подтвердить.
Одна из причин, по которой вы можете попытаться сделать это, - это если вы действительно не доверяете этому.Crashlytics правильно маркирует линии.Между их пользовательским интерфейсом и необработанными данными о сбоях много всего.Возможно, что-то пошло не так.Единственный способ подтвердить это - захватить аварийный адрес + двоичный файл и выполнить поиск самостоятельно.Если dwarfdump скажет вам, что это произошло в нулевой строке, то это подтверждает, что это просто артефакт генерации кода во время компиляции.
Однако я склонен полагать, что с пользовательским интерфейсом Crashlytics все в порядке.Я просто хотел указать на это как на возможность.
Что касается SIGTRAP - в этом нет ничего странного.Это всего лишь указание на то, что выполняемый код решил прекратить процесс.Это отличается, например, от SIGBUS, где ОС завершает работу.Это может быть вызвано проверкой целочисленных значений и / или границ диапазона Swift.В вашем коде есть что-то подобное в обоих местах.И, поскольку это было бы очень критично для производительности, было бы главным кандидатом для генерации встроенного кода.
Обновление
Теперь кажется, что, по крайней мере, в некоторых ситуацияхтеперь компилятор также использует имя файла <compiler-generated>
.Я уверен, что они сделали это, чтобы прояснить этот случай.Так что, возможно, с более свежими версиями Swift вы увидите <compiler-generated>:0
.Это может не помочь отследить сбой, но как минимум сделает вещи более очевидными.