XCode käyttää yhtä: Xcode-perustoimintoa

Xcode Uses One Xcode Basic Operation



https://blog.csdn.net/hitfyb/article/details/50875690

(1) Konsoli

shift + komento + Y : Näytä konsoli (Näytä / piilota virheenkorjausalue)



shift + komento + C : Aktivoi tarkennuskonsoli, kohdistin on konsolissa ja siihen voidaan syöttää.



Komento + K: Tyhjennä konsoli (Debug-> Debug Workflow-> Clear Console)



Asennettavissa BBUDebuggerTuckAway Laajennus, piilottaa virhekonsolin automaattisesti kirjoittaessasi

(2) Raja-arvo

Komento + : nykyinen rivin asettaminen / peruutuspisteen napsauttaminen sivupalkissa olevaa sinistä katkaisupistettä hiirellä Ota käyttöön poista käytöstä Nykyinen viivan katkaisupiste.

Komento + Y: Aktivoi tai deaktivoi kaikki katkaisupisteet maailmanlaajuisesti ja aktivoi virheenkorjaustilaan (katkaisupiste näkyy sinisenä).



Katkaisupisteitä / varoituksia kourussa voi napsauttaa hiiren kakkospainikkeella Paljastaa rikkoutumispisteessä / ongelmanavigaattorissa.

Temppu: muokkaa katkaisupisteitä (Muokkaa katkaisupistettä) :

Kunto : Aseta katkaisupisteen laukaisuehto, esimerkiksi 'i == 3' (huomaa, että välilyöntejä ei voi olla) osoittaakseen, että rikkoutumispiste laukeaa, kun i on yhtä suuri kuin 3.

Jättää huomiotta : raja-arvojen asettamisen on oltava jättää huomiotta Kuinka monta kertaa se keskeytyy, jos se asetetaan arvoon 5, se laukaisee, kun rikkoutumispiste havaitaan kuudennen kerran.

Toiminta : Aseta katkaisupisteen liipaisin toiminta Voi olla Debugger-komento, lokiviesti, Shell-komento tai ääni.

Voit esimerkiksi asettaa seuraavan virheenkorjauskomennon:

[1] Lue muistipuskurin arvo standardista :: merkkijono sig: mem lukee sig.c_str () -c sig.size ()

[2] Tulosta NSData-ilmentymä sig: po sig

(3) Virheenkorjaus

F6: Vaihe vaiheittain prosessin läpi ei tule funktion runkoon.

( fn +) F7: Syötä (Step Into) -toiminnon runko. Saattaa olla ristiriidassa multimediaavainten kanssa, joten tarvitaan fn-apua (suositellaan Aseta toimintonäppäimet F1-F12 vakiotoimintonäppäimiksi )。

( fn +) F8: Step Out -toiminnon runko. Multimediaavaimissa voi olla ristiriitoja, kuten iTunesin soittaminen, joten tarvitaan fn-apua.

Control + komento + Y: Jatka suoritusta katkaisupisteestä (Keskeytä / Jatka).

Control + komento + C: Suorita kohdistimen nykyiselle riville (jatka nykyiselle riville).

Temppu: siirrä ohjeosoitintaSiirrä ohjeosoitinta ) :

Kun katkaisupisteen virheenkorjaus on käynnissä, voit siirtää vihreän osoittimen nuolen (rivi 47) toiselle riville (rivi 49) tai muulle katkaisupisteelle (rivi 51) hypyn suorittamista varten.

Command + 8 voi keskittyä lokiraportinavigaattoriin vasemmassa siirtymispalkissa, jossa voit tarkastella virheenkorjauslokia.

(4) Katso

shift + komento + M : Virheenkorjauksen työnkulku-> Näytä muisti

Virheenkorjauksen työnkulku-> Näytä Purkaminen Virheenkorjauksessa se voi suorittaa kokoonpanokäskyjen tason virheenkorjauksen.

Temppu: muokkaa muuttuvan muistin arvoamuuta muistiarvoa virheenkorjauksen aikana ) :

Virheenkorjauksessa voit napsauttaa hiiren kakkospainikkeella muuttujaa alareunassa olevassa virheenkorjausikkunassa (virheenkorjausalue, jota voidaan kutsua Shift + Command + Y). View Memory / View Value As -vaihtoehdon lisäksi voit myös valita Muokkaa arvoa Muokkaa muistimuuttujan arvoa ajon aikana.

Hyödyllinen virheenkorjauksessa tiettyjä vaikeasti toistettavia vikoja tai rajatestejä, mikä vähentää linkkien uudelleen kääntämisen tuskaa joka kerta, kun muokkaat mittausnäytteen arvoa (kovakoodi).

(5) Lldb-virheenkorjauskomento

  • n / seuraava: astu yli, vastaa F6: ta
  • s / step: astu sisään, vastaa ( fn +) F7 ;
  • suorittaa loppuun : poistu, vastaa ( fn +) F8 ;
  • c / jatka: siirry seuraavaan katkaisupisteeseen, joka vastaa ^ ⌘Y
  • Lauseke / lauseke: Arvioi C / ObjC / C ++ -lauseke (C / ObjC / C ++ -lausekkeiden dynaaminen suoritus)
  • p / tulosta / lauseke / ilmaisu : Tulosta C / C ++ -muuttujana ;
// Tulosta SYSTEM_VERSION (voi lisätä UIDevice * -muunnoksen)
(lldb) p [[[UIDevice currentDevice ] systemVersion] doubleValue]
  • po / expr -O / lauseke -O : Tulosta Objective-C-objektina ;
// tulosta näytön rajat (voi lisätä UIScreen * -muunnoksen)
(lldb) po NSStringFromCGRect ([[UIScreen Päänäyttö ] rajat])
// Tulosta tilarivikehys (voi lisätä UIApplication * -muunnoksen)

(lldb) po NSStringFromCGRect ([UIAsovellus sharedApplication ] .statusBarFrame)

// Tulosta nykyisen keyWindow-juurinäkymä (voi lisätä UIViewController * -muunnoksen)

(lldb) po [[[UIAsovellus sharedApplication ] keyWindow] rootViewController]

  • Soita: soita. Itse asiassa yllä olevalla p / po: lla seuratulla lausekkeella (lausekkeella) on myös kutsun tehtävä. Yleensä puhelua käytetään vain silloin, kun ei tarvita nimenomaista lähtöä tai ei paluuarvoa, ja sitä käytetään dynaamiseen virheenkorjaukseen kutsukoodin lisäämiseksi.
    Voit esimerkiksi asettaa katkaisupisteen viewDidLoad: iin ja antaa sitten seuraavan komennon, kun ohjelma keskeytetään:
// Jatka ohjelman suorittamista puhelun jälkeen, näkymän taustaväri muuttuu punaiseksi
(lldb) kutsu [itseäkymä setBackgroundColor: [UIColor punainen väri]]
  • bt (backtrace), tulostaa nykyisen puhelupinon (kaatumispino), 'bt all' tulostaa pinon kaikista säikeistä (vastaa Komento + Komennon navigointi + 6).
  • kuva : Voidaan käyttää osoitukseen, on useita yhdistettyjä komentoja, käytännöllisempi on löytää pinon osoitetta vastaava koodi (rivi).
    Esimerkiksi UITableView: lla on yhteensä 2 osiota. Kun nykyiseen osioon.index≥2 viitataan, se aiheuttaa [UITableView rectForHeaderInSection:] -puhelun poikkeuksen. Lausekkeen avulla voit muuttaa arvoa dynaamisesti kaatumistilanteen luomiseksi. Simulaation virheenkorjaus.
    Konsolin bt-näytön poikkeus kaatumisen yhteydessä näkyy tällä hetkellä sovelluskerroksen koodissa '0x00d055b8 - [FACategoryTableView FACategorySectionHeaderDidTouched:] +744' (missä 0x00d055b8 on nykyisen pinon (koodisegmentin) siirtymä, 744 on Pinon runko Offset - PC-osoittimen siirtymä toiminnon kohdasta).
    Joten mitä poikkeusta aiheuttaa FACategoryTableView.m-tiedostossa oleva koodikutsurivi? Tässä vaiheessa 'code lookup --address', jota seuraa koodisegmentin offset-osoite (0x00d055b8) bt: n puhelupinossa, voi paikantaa poikkeuspuhelun koodirivin sijainnin.
  • x /muisti Lue: virheenkorjattavan prosessin muisti ja sen jälkeen Käynnistä ja lopeta Osoite tai -c määrittää määrän plus alkaa osoite. Lue muistikirja, jos haluat nähdä ohjeen:

Syntaksi :

luettu muisti []

Komentovaihtoehtojen käyttö :

Koko määrittää lohkon koon (palan)

--size) : Koko tavuina, jota käytetään näytettäessä valitussa muodossa.

Count määrittää, kuinka monta muistilohkoa (lohko / kohde) voidaan käyttää lähtöosoitteen kanssa.

-c (--count) : Näytettävien kohteiden kokonaismäärä.

Muoto määrittää sisällön näyttömuodon, muoto on sama kuin tulostus: c-char, s-string, d-decimal, x-hex.

-f (--format) : Määritä näytössä käytettävä muoto.

Komennonäytteet :

(a) Aloitus- ja loppuosoitteet, seuraavassa määritetään raja-osoite aloitusosoitteen siirtymän perusteella.

(lldb) mem luki 0x10b88f0c 0x10b88f0c + 9

0x10b88f0c: 39 38 37 36 35 34 33 32 31 987654321

(b) Määritä kaatuvien tavujen lukumäärä aloitusosoitteen jälkeen -c. Yllä oleva vastaa:

(lldb) mem luki 0x10b88f0c -c 9

0x10b88f0c: 39 38 37 36 35 34 33 32 31 987654321

(c) aloitusosoite + muistilohkon koko + muistilohkojen määrä (dump-heksamuoto)

(lldb) muisti luku -s 1 -f x -c 9 0x10b88f0c

0x10b88f0c: 0x39 0x38 0x37 0x36 0x35 0x34 0x33 0x32

0x10b88f14: 0x31

Kuvaus : dumpin muistinpalaa on 1 tavu, ja yllä oleva kaatopaikkojen kokonaiskoko * palamäärä = 9 tavua.

(d) Aloitusosoite + muistilohkon koko + muistilohkojen määrä (dump char -muoto)

(lldb) muisti luku -s 1 -f c -c 9 0x10b88f0c

0x10b88f0c: 987654321

(e) aloitusosoite + muistilohkon koko + muistilohkojen määrä (dump-merkkijonomuoto)

(lldb) mem luki 0x10b5cf2c -f s -c 1

0x10b88f0c: '987654321'

(f) lähtöosoite + muistilohkon koko + muistilohkojen määrä (dump int -muoto)

(lldb) muistin luku -s 4 -f x -c 3 0x10b88f0c

0x10b88f0c: 0x36373839 0x32333435 0x109f0031

Kuvaus: Yllä mainittu palan koko on 4 tavua (-s 4), palojen lukumäärä on 3 ja yhteensä 12 tavua kaadetaan.

  • muisti Write: Kirjoita virheenkorjattavan prosessin muistiin. Voit auttaa muistia kirjoittamaan apua:

Syntaksi: muistikirjoitus [[...]]

Temppu: lldb-tulostuksen virheellinen ongelma

Kun tulostat C-tyyppejä (mukaan lukien komposiittityypit) tai Objective-C-objekteja LLDB-virheenkorjauskomennolla p / po, saatat kohdata ongelmia, jos määritteitä ei ole tai tyypit eivät täsmää.

esimerkki 1 - Breakpoint-virheenkorjaus, tulosta nykyinen UIViewController-kehys:

  • Itse Xcode lldb: n virheiden takia pisteiden viittaukset määritteisiin ovat joskus tunnistamattomia, kuten suoritus (lldb) p self.view.frame -virhe: ominaisuutta 'frame' ei löydy objektista, jonka tyyppi on UIView *
  • Vaihda ominaisuuden pisteviittaus ominaisuuden kutsuun, suorita (lldb) p [self.view frame] antaa edelleen virheen: mikään tunnettu menetelmä '-frame' ei lähetä viestin lähetystä menetelmän palautustyyppiin
  • Itse Xcode lldb -virheen takia palautettua komposiittityyppiä ei voida tunnistaa suoraan. Tässä tapauksessa näyttötyypin muunnosta voidaan käyttää suorittamiseen (lldb) p (CGRect) [itsenäinen näkymäkehys] ei ilmoita virheestä!

Esimerkki 2 - Breakpoint-virheenkorjaus, nykyisen UIViewController navigationController -pino- ja childViewControllers-taulukon tulostaminen:

Pisteviittauksen virhemerkintä (ominaisuutta ei löydy): (lldb) po self.navigationController.viewControllers

Soita getteriin tulostamaan oikein: (lldb) po [[self navigationController] viewControllers]

Pisteviittauksen virhemerkintä (ominaisuutta ei löydy): (lldb) po self.childViewControllers

Soita getteriin tulostamaan oikein: (lldb) po [self childViewControllers]

(6) käytössä NSZombie käytössä Virheenkorjaus EXC_BAD_ACCESS

Kun lähetät viestin vapautetulle objektille (josta 90% voi olla objekti, jonka viitemäärä on 0) tai vapautat kyseiset automaattivapautusobjektit, tapahtuu virhe, kuten EXC_BAD_ACCESS.
Oletuksena Xcode ei anna sinulle osoitinta mihin koodiriviin ei tule käyttää vapautettua objektia, tai julkaisu on väärä.
Tuote -> Muokkaa kaaviota (Vaihtoehto + komento + R) -> Diagnostiikka , tarkista 'Objective-C: n jälkeen' Ota zombie-objektit käyttöön ”。
NSZombieEnabled-ympäristömuuttujan asettamisen jälkeen objekti muunnetaan _NSZombie-muotoon, kun se tuhotaan. Kun olet asettanut NSZombieEnabled-toiminnon, kun lähetät viestin jo vapautetulle objektille, tämä objekti ei vain ilmoita EXC_BAD_ACCESS-kaatumisesta. Se lähettää myös virhesanoman ja katoaa sitten ennustettavalla tavalla virheenkorjauspisteiden luomiseksi, jotta voimme selvittää, mikä objekti vapautetaan tai todennäköisesti vapautetaan tai johon viitataan vahingossa.
Huomautus : NSZombieEnabled-tiedostoa voidaan käyttää vain virheenkorjauksen aikana. Älä unohda poistaa sitä, kun tuote julkaistaan, koska NSZombieEnabled ei todellakaan vapauta dealloc-objektin muistia.

viite

Xcoden yleiskatsaus - Tietoja Xcodesta 》 《 Xcode-pikanäppäimet ja eleet

Xcode-avaimen sidonnat ja eleet 》 《 Vinkkejä Xcode-tehokkuuden parantamiseen

Xcode5.1 offline-asennus 》 《 Xcode-laajennus

Apu Xcode Vim-editorilla 》 《 Vim-komentokaavio ja xVim-käyttö 》 《 Virheellisen XVim-laajennuksen korjaustapa Xcode7: n päivittämisen jälkeen

Xcode-tiedostojärjestely 》 《 Xcode asettaa komentorivin käynnistysparametrit

Xcode-ympäristömuuttujat ja polkuasetukset 》 《 Xcode-koontilähtöhakemisto

VC: stä Xcode: iin 》 《 työtila ja aliprojekti ja kohde

Xcode luo staattisen kirjaston 》 《 Xcode4 tekee staattisia kirjastoja 1 '' Xcode4 tekee staattisia kirjastoja kaksi'

Kehyksen tekeminen Xcode-kohtaan 4.3 》 《 Xcode lisää riippuvaisen staattisen kirjastotekniikan

Staattisten kirjastojen rakentaminen iPhone SDK: lla 》 《 Staattiset kirjastot ja projektihankkeet

Tilastot Xcode-koodirivit iOS-kehitystä varten 》 《 Aloita iOS-sovellusten kehittäminen tänään

Luo Hello World -projekti, jossa on Xcode 》 《 Luo Hello World -sovellus, jossa on Xcode5 ja Interface Builder

LLDB: n pikaopas 》 《 LLDB - GDB-komentokartta 》 《 Xcode gdb / lldb -vianetsintäkomento

Xcode LLDB Debug -opetusohjelma 》 《 Koe LLDB-virheenkorjauskomentoon 》 《 iOS-sovelluksen kaatumisloki paljastaa 》 《 Suorita iOS-sovellusloki

Anna lldb: n parantaa tehokkuutta 》 《 iOS / OSX-virheenkorjaus: tanssi! Tanssiva valssi LLDB: n kanssa 》 《 Syy, miksi NSLog on tehoton, ja yritä tulostaa loki lldb-rikkoutumispisteellä