2009-12-19 1 views
0

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

 
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] не является загадочным признаком того, где произошла ошибка.

Как я могу:

  • Have среды разработка макинтоша скажи мне ошибку номера строки и файла произошла
  • Подавить бессмысленную стеку болтовню или изменить его на __actual функции names__ в качестве выходного сигнала, как выход ошибки грохота Пайтона выглядит.
+0

Я разрабатывал программное обеспечение Mac уже много лет, и я никогда не видел трассировку стека, которая выглядела примерно так. Что именно вы делаете? –

+0

Это разработка iPhone в XCode, и это результат работы консоли после сбоя. – bobobobo

+0

Да, я собрал это. На что вам нужно ответить, такие вопросы, как «запускаете ли вы исполняемый файл, в котором есть отладочные символы?» и «вы получаете такой же результат при отладке примерных приложений?» –

ответ

1

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

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

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

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

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

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

+0

«Механизм краш-движения не может попасть в символы» - хм! Это ВСЕГДА случается всякий раз, когда я запускаю программу объектно-с из XCode. Способ, которым вы предлагали отслеживать источник ошибок, кажется ужасно ручным. Что такое «файлы символов»? – bobobobo

+0

Файлы символов - это биты, которые компилятор пишет для корреляции исполняемого файла с исходным кодом. См. Документацию. Вы все еще не указали, что такое исключение; что вы находитесь в разделе «Отладка», указывает, что у вас есть возможность установить точку останова при повышении риска. См. Документацию еще раз (или google). – bbum

Смежные вопросы