No Xcode, o GDB permite alterar variáveis locais durante a depuração (veja como alterar o valor NSString durante a depuração no XCode? ). O LLDB oferece uma funcionalidade semelhante? Se sim, como podemos usá-lo?
No Xcode, o GDB permite alterar variáveis locais durante a depuração (veja como alterar o valor NSString durante a depuração no XCode? ). O LLDB oferece uma funcionalidade semelhante? Se sim, como podemos usá-lo?
Respostas:
expr myString = @"Foo"
(lldb) ajuda a expr
Avalie uma expressão C / ObjC / C ++ no contexto atual do programa, usando variáveis atualmente no escopo. Este comando recebe entrada 'bruta' (não é necessário citar coisas).Sintaxe: expressão -
Uso das opções de comando: expressão [-f] [-G] [-d] [-u] - expressão [-o] [-d] [-u] - expressão
-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.
Exemplos:
expr minha_strutura-> a = minha_array [3]
expr -f bin - (índice * 8) + 5
expr char c [] = "foo"; c [0]NOTA IMPORTANTE: Como esse comando recebe a entrada 'bruta', se você usa alguma opção de comando, deve usar '-' entre o final das opções de comando e o início da entrada bruta.
'expr' é uma abreviação de 'expression'
'expr myLabel.text = @"hello!"
mas recebo uma error: property 'text' not found on object of type 'UILabel *'
... Alguma idéia?
expr (void)[label setText:@"Foo"]
deve fazê-lo. A sintaxe de pontos geralmente não funciona no depurador. O lldb provavelmente o interpreta como você deseja acessar um membro de um c-struct, mas não tenho certeza se esse é o motivo pelo qual não funcionará. A sintaxe de pontos também não funciona po
. em vez de po label.text
você ter que usarpo [label text]
@property
.
p
como um atalho para expr
. Exemplo:(lldb) p url = @"http://google.com"
e
como um atalho para expr
. BTW, p
é um apelido para impressão, que é um apelido para expr --
(apenas avaliar entrada bruta, sem sinalizadores) expr -o -- [object]
ou po
geralmente fornece uma saída mais útil para objetos.
O seguinte material funciona para mim. Estou usando o Xcode 8.
Se você deseja definir alguma variável (por exemplo, um "dict") para zero e testar o fluxo de código, tente o seguinte.
Será algo como no console.
(lldb) expression dict = nil
(NSDictionary *) $5 = nil