я получил ошибкуКак отлаживать EXC_BAD_ACCESS ошибка
код EXC_BAD_ACCESS = 2 at0xb0987654
Я интересно, как распечатать значения в 0xb0987654?
я получил ошибкуКак отлаживать EXC_BAD_ACCESS ошибка
код EXC_BAD_ACCESS = 2 at0xb0987654
Я интересно, как распечатать значения в 0xb0987654?
Чтобы отладить EXC_BAD_ACCESS, вы можете узнать, где находится оборванный указатель, включив объекты зомби.
Xcode
Выберите схему редактирования, закладка затем Diagnostics в разделе Run, а затем выберите опцию "Zombie Objects.
AppCode
Выберите редактировать цель, и добавьте следующую переменную окружения:
NSZombieEnabled=YES
Другой причиной EXC_BAD_ACCESS может быть бесконечной рекурсии, которую можно найти, добавив некоторые протоколирования.
Обновление для C++:
Для отладки оборванных указателей в C++ с Clang компилятора попытаться использовать Address Sanitizer (ASAN) от Google.
Я пробовал, бесполезно. Потому что это код C++, вызывающий проблему. –
@AdamLee Как насчет этого тогда? http://stackoverflow.com/questions/3199067/c-catching-dangling-reference –
@AdamLee, Уп выглядит, как MudFlap только gcc, обновлено для Clang/llvm –
Похоже, что вы пытаетесь написать на кодовую страницу или что-то еще? EXC_BAD_ACCESS описан в /usr/include/mach/exception_types.h:
#define EXC_BAD_ACCESS 1 /* Could not access memory */
/* Code contains kern_return_t describing error. */
/* Subcode contains bad memory address. */
И от kern_return.h:
#define KERN_PROTECTION_FAILURE 2
/* Specified memory is valid, but does not permit the
* required forms of access.
*/
вы можете увидеть, что адрес в вашем двоичном, выполнив:
(lldb) image lookup -va 0xb0987654
Но то, что вам действительно нужно выяснить, это кто пытается там написать. Если проблема проста, это может сказать вам, что не так, но, по словам Джаспера, это, вероятно, некоторая польза послезабота или другая подобная проблема, а плохой актер давно ушел к тому времени, когда вы рухнули. guardmalloc также может иногда улавливать такую ошибку (вы можете включить это в Xcode в схеме запуска.)
' image lookup -va 0x1586470c4' в lldb дает мне никакого вывода вообще, даже сообщение об ошибке. –
В настоящее время «просмотр изображения -a» просто распечатывает то, что он может найти по заданному адресу, даже в случае «без символов по этому адресу», когда это ничего. LLDB должен действительно печатать некоторую ошибку, если она не может найдите любые символы, связанные с данным адресом. Пожалуйста, напишите ошибку об этом либо с репортером ошибок Apple, либо с lldb.llvm.org bugzilla. Благодарю. –
Определите, что вы сделали, что вызвало сбой. Сбой при просмотре определенного вида контроллера didLoad или в методе делегата или в конкретном действии. Это часто поможет найти объект, который вызывает ошибку.
Надеюсь, это поможет вам.
С уважением, GISON
Я полагаю, вы не хотите распечатать значение по этому адресу, так что очень адрес ваша проблема в первую очередь. Что за то, что вы получили, - это вопрос, который нужно задать. – Jay