2016-09-01 21 views
11

Salt okunur değişkenin üzerine yazmak için lldb'nin bir yolu var mı? Eğer lldb ile Xcode bir kesme noktasında aşağıdaki yapmak bir yapıSalt okunur değişkeni lldb hızlıca gözden geçirme

struct Object { 
    let name: String 
} 

olsaydı

Örneğin

(lldb) expression object.name = "Tom" 

ben tam anlamak

error: <EXPR>:2:19: error: cannot assign to property: 'name' is a get-only property 

Çıkacaksınız Bu olur, sadece hata ayıklama sırasında bu etrafında almak için kolay bir yol olup olmadığını bilmek ister misiniz?

bu Swift & olduğunu unutmayınız DEĞİL Sen bellek üzerine yazma ve dize değerini değiştirmek için memory write {address} lldb komutunu kullanabilirsiniz

+0

Neden bir salt okunur değişkeni üzerine yazmanız gerekiyor? Bir 'Nesnenin' adını değiştiremeyeceğinizi bildiğinizden, neden adını değiştirmek yerine, neden yeni bir 'Nesne' oluşturmuyorsunuz? –

+1

@Joe Çünkü hata ayıklaması yaparken ve lldb kullanırken, farklı davranışları test etmek için çalışma zamanında bir değişkeni değiştirmek genellikle yararlıdır. Bağımlılık enjeksiyonu gerektiren karmaşık bir nesneye sahipseniz, yalnızca yeni bir nesne ayırmak konsolunuzda daha karmaşık hale gelir. – sbarow

+0

Öyleyse neden var değiştirelim? – WMios

cevap

4

Objective-C. Her seferinde bir adres yapmayı başardım, ancak memory write'un bunu tek yapabildiği görülüyor. İşte

(lldb) help memory write 
    Write to the memory of the process being debugged. 

Syntax: memory write <cmd-options> <address> <value> [<value> [...]] 

Command Options Usage: 
    memory write [-f <format>] [-s <byte-size>] <address> <value> [<value> [...]] 
    memory write -i <filename> [-s <byte-size>] [-o <offset>] <address> <value> [<value> [...]] 

     -f <format> (--format <format>) 
      Specify a format to be used for display. 

     -i <filename> (--infile <filename>) 
      Write memory using the contents of a file. 

     -o <offset> (--offset <offset>) 
      Start writing bytes from an offset within the input file. 

     -s <byte-size> (--size <byte-size>) 
      The size in bytes to use when displaying with the selected format. 

    This command takes options and free-form arguments. If your arguments 
    resemble option specifiers (i.e., they start with a - or --), you must use 
    ' -- ' between the end of the command options and the beginning of the 
    arguments. 

bir örnek (daha iyi bir yöntem sağlayabilir daha lldb anlayışı ve Swift dahili özelliklerine sahip umarım birisi) var:

Example using memory write

Bu bir defada belleği bir bayt üzerine yazarak gösterir . po "Tom".dataUsingEncoding(NSUTF8StringEncoding)!, object.name belleğinin içinden geçmek ve üzerine yazmak için kullanılan hex gösterimini alır. Eminim bunu yapmak için daha kolay bir yol var (tek bir komutta), ancak doğru parametre değerlerini çözemedim.

+1

Tüm baytların bir kerede değiştirileceği sözdizimi, bellek yazıyor

... ', örneğin, bellek yazılır 0x1000022c0 -s 1 66 6F 6F 62 61 72' ... –

+0

İlginç çözüm, ancak çalışıyor gibi görünüyor, teşekkürler. – sbarow

+1

@ l'L'l Cevabınız için teşekkür ederim, bellek yazma 0x1000022c0 -s 6 666F6F626172' çalışmayan bir şey çalışıyordum. @sbarow Kabul ettiğiniz için teşekkür ederiz, bu oldukça hantal bir çözümdür. – Austin

İlgili konular