Когда я остановился на точке останова в XCode, я вижу значение переменных NSString. Как я могу изменить их? Я могу изменить переменные типа int или double, но не NSString.
Как изменить значение NSString при отладке в Xcode?
Ответ 1
Вы можете сделать это в консоли отладки. Скажем, у вас есть NSString* myVar
. В консоли, после (gdb)
, введите set myVar = @"My new string"
. Если вы используете (lldb)
, используйте вместо него эквивалентное выражение expr myVar = @"My new string"
.
Это может не отображаться правильно на панели переменных, но вы можете проверить значение, введя po myVar
в консоль. Ваш код должен забрать новое значение.
Для получения подробной информации об использовании expr
ознакомьтесь с fooobar.com/questions/46612/....
Ответ 2
Вы можете, но вы должны вызвать код из командной строки отладчика. Например, скажем, что у вас есть точка останова после этой строки:
NSString *myString = @"My current string";
Затем в приглашении (gdb) введите:
call myString = @"My new string"
Вы можете po myString
перед изменением строки и после ее изменения, чтобы убедиться, что она была изменена.
Другой пример: предположим, что вы хотите изменить заголовок контроллера представления. Вы можете использовать установщик. * Примечание. Точечная нотация не поддерживается в командной строке отладчика. Например, пусть загружается представление, а затем устанавливается точка останова где-то в течение всего срока действия вашего контроллера вида. Затем сделайте следующее:
call (id)[self setTitle:@"New Title"]
Продолжайте выполнение программы, и вы должны увидеть обновление заголовка контроллера просмотра.
Ответ 3
Для NSError я использую это:
(lldb) expression aTempError = (NSError*)[[NSError alloc] initWithDomain:@"MANO" code:1 userInfo:nil]
Ответ 4
(https://stackoverflow.com/users/1202867/n8tr) Комментарий n8tr сверху показывает, как это сделать. Вы просто предшествуете своему назначению "po" следующим образом: po myString = @ "my_new_string" и po self.title= @ "Новое название".