Как изменить значение NSString при отладке в Xcode?

Когда я остановился на точке останова в XCode, я вижу значение переменных NSString. Как я могу изменить их? Я могу изменить переменные типа int или double, но не NSString.

Ответ 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= @ "Новое название".