Breakpoint — nedir, kesme noktası çeşitleri ve hata ayıklamada kullanımı

Yazar: IT Sectr Yayınlanma: 2026-05-06 Okuma süresi: 9 dk

Kesme noktası (breakpoint), kodda, ulaşıldığında hata ayıklayıcının program yürütmeyi durum incelemesi için duraklattığı özel bir işarettir. Apple Debugging Guide'a göre breakpoint'ler, geliştiricinin kaynak kodunu değiştirmeden değişken değerlerini, çağrı yığınını görüntülemesine ve adım adım yürütme yapmasına olanak tanır. Bu, gerçek zamanlı olarak hataları teşhis etmek ve uygulama davranışını analiz etmek için ana araçtır.

Önemli Noktalar

  • Breakpoint — kaynak kodunda, durum analizi için belirtilen noktada program yürütmeyi durduran bir işarettir.
  • Türleri çizgisel, koşullu, sembolik ve istisna kesme noktalarını içerir — her biri kendi uygulama alanına sahiptir.
  • LLDB — breakpoint'leri grafik arayüz ve konsol komutları aracılığıyla yöneten Xcode hata ayıklayıcısı.
  • Koşullu breakpoint'ler yalnızca belirtilen mantıksal ifade doğru olduğunda tetiklenir, döngülerde hata ayıklarken zaman kazandırır.
  • Breakpoint'ler etkin değilse performans etkilenmez — koşullu olarak derlenirler.

Breakpoint Nedir ve Neden Gereklidir

Breakpoint, kaynak kodun belirli bir satırına yerleştirilen etkin bir işarettir; bu satıra ulaşıldığında hata ayıklayıcı, iş parçacığı yürütmesini zorla durdurur. Bu anda, geliştirici uygulama durumu üzerinde tam kontrol elde eder: geçerli kapsamdaki tüm değişkenlerin değerlerini görebilir, çağrı yığınını inceleyebilir, rastgele ifadeler yürütebilir ve yürütmeye adım adım devam edebilir. Breakpoint'ler olmadan, hata ayıklama sonsuz geçici print ifadeleri ekleyip sonra silmekten ibaret olurdu — kodu kirleten ve etkileşimli kontrol sağlamayan bir yaklaşım.

Bir breakpoint'in temel amacı, hatanın kaynağını bulmaktır. Bir uygulama beklenmedik şekilde davrandığında, geliştirici şüpheli bölümden önce bir kesme noktası koyar ve hangi verilerin girdiğini, değişkenlerin nasıl değiştiğini ve yürütmenin hangi yolu izlediğini sırayla analiz eder. Apple'a göre, mobil uygulamalardaki hataların %70'inden fazlası, statik kod analizi yerine breakpoint'ler ve adım adım yürütme kombinasyonuyla kesin olarak belirlenir.

Breakpoint'ler sürüm yapılarının performansını etkilemez — yalnızca Debug yapılandırmasında derlenirler. Xcode, hata ayıklama kodunu ön işlemci yönergeleriyle saran özel bir DEBUG bayrağına sahiptir. Bu, breakpoint'lerin App Store'a girmemesini ve son kullanıcıları yavaşlatmamasını sağlar.

Durdurma Mekanizması Nasıl Çalışır

İşlemci, breakpoint ile işaretlenmiş bir satıra ulaştığında, bir donanım veya yazılım kesintisi oluşur. Xcode'da SIGTRAP mekanizması kullanılır — hata ayıklayıcı tarafından yakalanan bir izleme sinyali. LLDB tüm iş parçacıklarını askıya alır, kontrolü Xcode arayüzüne verir ve geliştiricinin komutunu bekler: devam et (continue), adım atla (step over), içine gir (step into) veya dışarı çık (step out).

swift
func fetchUserData(userId: Int) {
    // LLDB will stop here if breakpoint is set
    let url = URL(string: "https://api.example.com/user/\(userId)")
    var request = URLRequest(url: url)
    request.httpMethod = "GET"
    print("Fetching user \(userId)")
}

Yukarıdaki örnekte, let url = ... satırına yerleştirilen breakpoint, işleve hangi userId'nin iletildiğini, URL'nin doğru şekilde oluşturulup oluşturulmadığını ve ağ çağrısı yürütülmeden önce istekte hangi başlıkların ayarlandığını kontrol etmeye olanak tanır.

Xcode'da Kesme Noktası Türleri

Xcode, her biri belirli bir hata ayıklama görevini çözen beş ana breakpoint türü sağlar. Farklılıklarını anlamak, her durum için en uygun aracı seçmeye ve yalnızca çizgisel kesme noktaları kullanmaya kıyasla teşhis süresini 2–3 kat azaltmaya olanak tanır.

Breakpoint TürüAmaçEtkinleştirme
Line breakpointBelirli bir kod satırında durmaDüzenleyicide satır numarasına tıklayın
Conditional breakpointBir koşul karşılandığında durmaSağ tık → Edit Breakpoint → Condition
Symbolic breakpointBir işlev/yöntem çağrıldığında durmaBreakpoint Navigator → + → Symbolic Breakpoint
Exception breakpointBir istisna fırlatıldığında durmaBreakpoint Navigator → + → Exception Breakpoint
Error breakpointBir hata oluştuğunda durma (Swift)Breakpoint Navigator → + → Swift Error Breakpoint

Line Breakpoint — Temel Tür

Line breakpoint en yaygın türdür. Xcode düzenleyicisinde satır numarasına tek bir tıklamayla ayarlanır. Bu satıra ulaşıldığında yürütme duraklatılır ve geliştirici, Debug Area paneli veya LLDB konsolu aracılığıyla durumu inceleyebilir. Stack Overflow istatistiklerine göre, iOS geliştiricilerinin %85'inden fazlası çizgisel breakpoint'leri birincil hata ayıklama aracı olarak kullanırken, diğer türler üçüncü taraf kitaplıklarında hata ayıklama veya istisnaları yakalama gibi belirli senaryolar için kullanılır.

Symbolic Breakpoint — İşlev Çağrılarını Yakalama

Symbolic breakpoint, belirli bir yöntem veya işlev çağrıldığında, o yöntemin kaynak koduna erişiminiz olmasa bile durmanızı sağlar. Sistem çerçevelerinde hata ayıklarken bu paha biçilmezdir — örneğin, UIKit'in layoutSubviews'i çağırdığı anı yakalamak için. Yapılandırma, sembol adını (ör. Objective-C için -[UIView layoutSubviews] veya Swift için UIView.layoutSubviews()) ve isteğe bağlı parametreleri içerir: modül, koşul ve yoksayma sayısı.

swift
// Symbolic breakpoint to intercept layoutSubviews on UITableView
// Symbol name: -[UITableView layoutSubviews]
// Action: po UITableView.appearance()

class CustomTableView: UITableView {
    override func layoutSubviews() {
        super.layoutSubviews()
        // Symbolic breakpoint here will intercept the call
        print("layoutSubviews called")
    }
}

Koşullu Breakpoint'ler ve Eylem Yapılandırması

Koşullu breakpoint, satırın her yürütülmesinde değil, yalnızca belirtilen mantıksal ifade true olarak değerlendirildiğinde tetiklenir. Bu, döngülerde, dizi işlemede ve özyinelemeli çağrılarda hata ayıklarken büyük zaman tasarrufu sağlar — her seferinde manuel olarak Continue tıklamak yerine, geliştirici bir koşul belirler ve hata ayıklayıcı yalnızca ilgili anda durur.

Durma Koşulunu Ayarlama

Koşul eklemek için breakpoint'e sağ tıklayın, Edit Breakpoint'i seçin ve Condition alanına Swift veya Objective-C cinsinden bir ifade girin. Karşılaştırmalar, mantıksal operatörler ve yan etkisi olmayan yöntem çağrılarına izin verilir. Xcode, durdurulan program bağlamında ifadeyi değerlendirir ve doğruysa hata ayıklayıcı durumu yakalar.

swift
for index in 0..<1000 {
    // Breakpoint with condition: index == 500
    // The debugger will stop only on the 501st iteration
    processItem(at: index)
}

Tetiklemede Eylemler

Bir koşula ek olarak, breakpoint programı durdurmadan otomatik eylemler gerçekleştirebilir. Bu, breakpoint ayarlarındaki Automatically continue after evaluating seçeneği aracılığıyla uygulanır. Eylemler şunları içerir: konsola değer çıktısı (po variable), ses sinyali çalma, rastgele bir LLDB komutu yürütme veya shell betiği çalıştırma. Bu yaklaşım, geçici print ifadelerinin yerini alır ve kaynak kodunu değiştirmeden veri kaydetmeye olanak tanır.

swift
// Breakpoint with action: po “Index: \(index), value: \(items[index])”
// Automatically continue = true → program does not stop

func processItems(_ items: [String]) {
    for (index, item) in items.enumerated() {
        // Here the breakpoint logs every iteration without stopping
        print("Processing \(item)")
    }
}

Bu teknik özellikle UI güncellemelerinde hata ayıklarken kullanışlıdır — örneğin, denetleyici koduna müdahale etmeden tüm çerçeve değişikliklerini kaydetmek için. Ray Wenderlich'e göre, geçici print ifadeleri yerine breakpoint eylemleri kullanmak, sonrasında kodu temizleme gereği olmadığından hata ayıklama süresini %30–40 oranında azaltır.

Breakpoint'leri LLDB ile Yönetme

Xcode kullanışlı bir grafik arayüz sağlasa da, LLDB hata ayıklayıcı konsolundan doğrudan kesme noktalarının programatik yönetimi için düzinelerce komutu destekler. Bu, GUI aracılığıyla kullanılamayan yetenekler sunar: düzenli ifadelerle toplu breakpoint devre dışı bırakma, dinamik olarak yüklenen kitaplıklarda kesme noktaları ayarlama ve karmaşık çok adımlı tetikleyiciler oluşturma.

Breakpoint'ler için Temel LLDB Komutları

LLDB KomutuAçıklamaÖrnek
breakpoint setBreakpoint ayarlamabreakpoint set -f ViewController.swift -l 42
breakpoint listTüm breakpoint'leri göstermebreakpoint list
breakpoint disableNumaraya göre breakpoint devre dışı bırakmabreakpoint disable 1
breakpoint deleteBreakpoint silmebreakpoint delete 1.2
breakpoint modifyKoşul veya eylem değiştirmebreakpoint modify -c “i > 100” 1
lldb
(lldb) breakpoint set -f LoginViewController.swift -l 15 -c "email.isEmpty"
Breakpoint 1: 15 locations added.
(lldb) breakpoint modify 1 -C "po email" -G true
(lldb) breakpoint list
1: name = 'LoginViewController.swift:15', condition = 'email.isEmpty'
    1.1: addr = 0x1000a3b40

breakpoint set'te Düzenli İfadeler

LLDB, işlev adları için düzenli ifadelerle breakpoint ayarlamayı destekler. Bu, bir kalıpla eşleşen tüm yöntemleri yakalamaya olanak tanır — örneğin, belirli bir sınıfta handle ile başlayan tüm yöntemler. Bu yaklaşım, yeniden düzenleme sırasında ve belirli bir olayın işlenmesinde hangi yöntemlerin yer aldığını anlamanız gerektiğinde bilinmeyen kod analizinde kullanılır.

lldb
(lldb) breakpoint set -r "handle[A-Z]" -s DataManager
Breakpoint 2: 6 locations.
(lldb) breakpoint set -r ".*Error.*"
Breakpoint 3: 23 locations.

Sembolik Breakpoint'ler ve İstisna Kesme Noktaları

Exception breakpoint, herhangi bir istisna fırlatıldığında program yürütmeyi durdurur — hem Objective-C hem de Swift hataları. Xcode'da yalnızca Objective-C istisnalarını, yalnızca Swift hatalarını veya tüm türleri yakalayacak şekilde yapılandırabilirsiniz. Bu, uygulama kodda net bir konum belirtmeden çöktüğünde vazgeçilmez bir araçtır — örneğin, serbest bırakılmış bir nesneye erişirken.

Swift Error Breakpoint

Swift Error Breakpoint, Xcode 11'de tanıtılan özelleştirilmiş bir türdür. Bir Swift işlevinin throw aracılığıyla bir hata fırlattığı anı, catch bloğuna ulaşmadan önce yakalar. Bu, hangi işlevin hangi argümanlarla hatayı oluşturduğunu görmeyi sağlar; birden çok hata işleme düzeyine sahip karmaşık çağrı zincirlerinde hata ayıklarken kritiktir.

swift
enum NetworkError: Error {
    case invalidURL
    case noData
    case decodingFailed(String)
}

func loadUserProfile(id: Int) throws -> UserProfile {
    guard id > 0 else {
        throw NetworkError.invalidURL
    }
    // Swift Error Breakpoint will stop here on throw
    return UserProfile(id: id, name: "Test")
}

Sembolik breakpoint'ler KVO ve NotificationCenter hata ayıklarken de etkilidir. observeValue(forKeyPath:of:change:context:) üzerinde bir breakpoint ayarlayarak geliştirici, uygulamadaki tüm KVO bildirimlerini yakalayabilir; bu, beklenmeyen UI güncellemelerini veya özellik gözlemiyle ilgili yarış koşullarını teşhis etmeye yardımcı olur.

Kesme Noktalarıyla Çalışmak İçin Pratik İpuçları

Breakpoint'lerin etkili kullanımı, yalnızca bir satırda durmanın çok ötesine geçer. Deneyimli geliştiriciler, breakpoint türlerini LLDB betikleri, geçici durma bölgeleri ve tekrarlanabilir hata ayıklama için yapılandırma dışa aktarma ile birleştirir. Apple ve Google mühendislerinin pratiğiyle desteklenen en kullanışlı tekniklere bakalım.

Şüpheli Kodu Ayırma

Yakalanması zor hatalarda hata ayıklarken, yöntem girişinde bir breakpoint ve anahtar değişkendeki değişiklikte bir watchpoint kombinasyonunu kullanın. Atamadan önce bir çizgisel breakpoint ayarlayın, ardından LLDB komutu watchpoint set variable ile değişkende bir watchpoint oluşturun. Değer değiştiğinde, değişiklik kodun neresinde olursa olsun hata ayıklayıcı duracaktır. Google'a göre bu yaklaşım, tek bir hata ayıklama oturumunda vakaların %90'ında bir veri yarışının kaynağını bulabilir.

lldb
(lldb) watchpoint set variable self->_balance
Watchpoint 1: addr = 0x600000c4b80 size = 8
    state = enabled  type = w
    watchpoint spec: 'self._balance'
(lldb) watchpoint list
1: location = 0x600000c4b80, type = write, variable = '_balance'

Test Senaryoları için Breakpoint Grupları

Xcode, Breakpoint Navigator aracılığıyla breakpoint'leri gruplamanıza olanak tanır. Her senaryo için ayrı bir grup oluşturun — örneğin, “giriş”, “satın alma”, “ağ hataları”. Belirli bir işlevselliği test ederken, yalnızca ilgili grubu etkinleştirin, diğerlerini devre dışı bırakın. Bu, yanlış tetiklemeleri önler ve breakpoint sayısının birkaç düzineyi aşabileceği büyük projelerde hata ayıklamayı hızlandırır. Bir grubu dosyaya dışa aktarmak, yapılandırmayı sürüm kontrolü aracılığıyla meslektaşlarınızla paylaşmanıza olanak tanır.

LLDB Betikleriyle Otomasyon

Karmaşık senaryolar için LLDB, bir breakpoint tetiklendiğinde Python betiklerinin yürütülmesini destekler. Breakpoint eyleminde script import my_debug_helper; my_debug_helper.log_state() belirtin. Bu, sınırsız olanaklar sunar: otomatik istatistik toplama, çağrılar arasında durum karşılaştırma, hata ayıklama kapsamı raporları oluşturma. Apple'a göre LLDB Python API'si, CI testleri sırasında otomatik çökme analizi için Xcode Cloud'da kullanılır.

Sıkça Sorulan Sorular

Breakpoint'ler uygulama hızını etkiler mi?

Etkin olmayan breakpoint'ler performansı etkilemez — yalnızca Debug yapılandırmasında derlenirler. Etkin kesme noktaları donanım kesintisi mekanizması nedeniyle yürütmeyi yavaşlatır, ancak yalnızca hata ayıklama sırasında.

Kaynak kodu olmadan üçüncü taraf kitaplığında breakpoint ayarlanabilir mi?

Evet, yöntem veya işlev adına göre Symbolic breakpoint aracılığıyla. Kaynak kod mevcut olmasa bile LLDB, sembol çağrıldığında duracaktır. Ek olarak, adım adım gezinme için LLDB sökücü kullanılabilir.

Step Over ve Step Into arasındaki fark nedir?

Step Over geçerli satırı tamamen (işlev çağrıları dahil) yürütür ve sonraki satırda durur. Step Into çağrılan işlevin içine girer ve adım adım hata ayıklamaya olanak tanır. Step Out kontrolü çağırana geri verir.

Breakpoint'ler Xcode oturumları arasında nasıl kaydedilir?

Breakpoint'ler otomatik olarak proje içindeki xcuserdata içinde kaydedilir. Meslektaşlarla paylaşmak için Breakpoint Navigator → Share aracılığıyla dışa aktarmayı kullanın. .xcbkptlist dosyası, hata ayıklama ekip çalışmasıysa depoya eklenebilir.

Bir breakpoint programı durdurmazsa ne yapmalı?

Yapının Debug yapılandırmasını, breakpoint etkinliğini (mavi simge), sembolik breakpoint'ler için sembolün doğruluğunu ve kaynak kodun yürütülebilir ikili dosyayla eşleştiğini kontrol edin — genellikle Clean Build Folder yardımcı olur.

Özet

  • Breakpoint — durum analizi için belirtilen satırda program yürütmeyi duraklatan birincil hata ayıklama aracı.
  • Xcode 5 tür kesme noktasını destekler: çizgisel, koşullu, sembolik, istisna ve Swift Error.
  • Koşullu breakpoint'ler yalnızca belirtilen ifade doğru olduğunda tetiklenir — döngüler ve diziler için ideal.
  • LLDB, toplu devre dışı bırakma ve düzenli ifadeler dahil breakpoint'lerin programatik yönetimi için düzinelerce komut sağlar.
  • İstisna ve Swift Error breakpoint'leri, catch bloğuna ulaşmadan önce hataları yakalayarak çökme teşhisini basitleştirir.
  • Breakpoint eylemleri (günlükleme, ses, betikler) kaynak kodunu değiştirmeden geçici print ifadelerinin yerini alır.
  • Watchpoint breakpoint ile birleştiğinde, programın herhangi bir noktasından değişken değişikliklerini izlemeye olanak tanır.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun