У Xcode GDB дозволяє змінювати локальні змінні під час налагодження (див. Як змінити значення NSString під час налагодження в XCode? ). Чи пропонує LLDB подібний функціонал? Якщо так, то як ми можемо ним користуватися?
У Xcode GDB дозволяє змінювати локальні змінні під час налагодження (див. Як змінити значення NSString під час налагодження в XCode? ). Чи пропонує LLDB подібний функціонал? Якщо так, то як ми можемо ним користуватися?
Відповіді:
expr myString = @"Foo"
(lldb) допоможе expr
Оцінити вираз C / ObjC / C ++ в контексті поточної програми, використовуючи змінні, що знаходяться в області дії. Ця команда приймає "сировину" (не потрібно цитувати речі).Синтаксис: вираз -
Параметри команд Використання: вираз [-f] [-G] [-d] [-u] - вираз [-o] [-d] [-u] - вираз
-G <gdb-format> ( --gdb-format <gdb-format> ) Specify a format using a GDB format specifier string. -d <boolean> ( --dynamic-value <boolean> ) Upcast the value resulting from the expression to its dynamic type if available. -f <format> ( --format <format> ) Specify a format to be used for display. -o ( --object-description ) Print the object description of the value resulting from the expression. -u <boolean> ( --unwind-on-error <boolean> ) Clean up program state if the expression causes a crash, breakpoint hit or signal.
Приклади:
expr my_struct-> a = my_array [3]
expr -f bin - (індекс * 8) + 5
expr char c [] = "foo"; c [0]ВАЖЛИВА ПРИМІТКА. Оскільки ця команда приймає "необроблений" вхід, якщо ви використовуєте будь-які параметри команд, ви повинні використовувати "-" між кінцем параметрів команди та початком вихідного вводу.
'expr' - це абревіатура для 'express'
'expr myLabel.text = @"hello!"
але я отримую error: property 'text' not found on object of type 'UILabel *'
... Будь-які думки?
expr (void)[label setText:@"Foo"]
повинен це зробити. Dot-синтаксис зазвичай не працює у відладчику. lldb, ймовірно, інтерпретує це так, як ви хотіли отримати доступ до члена c-структури, але я не впевнений, чи це причина, що вона не працюватиме. Dot-Syntax не працює po
ні для одного. замість цього po label.text
вам доведеться скористатисяpo [label text]
@property
.
p
як ярлик для expr
. Приклад:(lldb) p url = @"http://google.com"
e
як ярлик для expr
. BTW p
- це псевдонім для друку, який є псевдонімом expr --
(просто ухиляйте необроблений вхід, відсутні прапори) expr -o -- [object]
або, po
як правило, дає більш корисний вихід для об'єктів.
Наступний матеріал працює для мене. Я використовую Xcode 8.
Якщо ви хочете встановити якусь змінну (наприклад, "dict") на нуль, а потім перевірити потік коду, ви можете спробувати наступне.
Це буде виглядати приблизно як на консолі.
(lldb) expression dict = nil
(NSDictionary *) $5 = nil