Лучшее поведение под залог перед лицом ошибки, разработка Mac OS - PullRequest
0 голосов
/ 19 декабря 2009

Когда я пишу программу для iPhone, что делает яблочная среда, когда что-то идет не так (от «нераспознанного селектора» до чего-то еще), приложение вылетает, и на консоли у меня появляется эта бессмысленная отладка, выглядит так:

2009-12-19 11:57:37.843 ModelsProg[394:207] Stack: (
    30884955,
    2431960329,
    31266875,
    30836342,
    30688962,
    10115,
    2721311,
    2759178,
    2747272,
    2729683,
    2756789,
    38981329,
    30669696,
    30665800,
    2723433,
    2760707,
    9948,
    9802
)

Честно говоря, я не могу придумать более бесполезный способ попытаться помочь разработчику отследить ошибку. Он даже не говорит вам, из какой строки возникла проблема, если только [394: 207] не является каким-то загадочным признаком того, где произошла ошибка.

Как я могу:

  • Пусть среда разработки Mac сообщит мне об ошибке номера строки и произошел файл
  • Подавить бессмысленную стековую болтовню или замените ее на __actual имя функции__ в качестве выходных данных, как выглядит вывод сбойной ошибки Python.

1 Ответ

1 голос
/ 19 декабря 2009

Вы запускаете двоичный файл без символов (возможно, двоичный файл Release) или сбой происходит в месте, где механизм аварийного отслеживания не может получить символы (как необработанное исключение). Эти # являются адресами, которые обычно ищутся для получения символа.

Как правило, для стека, подобного этому, в строке непосредственно перед выбросом есть сообщение журнала неперехваченных исключений. То, что обычно дает вам практически всю необходимую информацию.

Однако, если вам нужно символизировать трассировку стека, есть несколько способов сделать это.

Если вы находитесь в gdb, вы можете использовать info symbol 30884955 (очевидно, подставляя различные числа), чтобы получить дополнительную информацию о символе по этому адресу в трассировке стека. info line *30884955 может привести к еще более полезным результатам.

Ключ, однако, в том, что вам нужны файлы символов где-нибудь доступными. Из XCode они должны просто быть там (если вы не нарушили конфигурацию генерации символов вашего приложения). В противном случае вам нужно будет загрузить их с помощью команды symbol-file.

Если вы хотите автоматизировать это или сделать символику вне gdb, используйте команду atos.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...