Section 5/161 menit

5. Breakpoints Lanjutan

5. Breakpoints Lanjutan

Conditional Breakpoint

Breakpoint hanya berhenti jika kondisi terpenuhi — sangat berguna di dalam loop yang iterasi ribuan kali.

swift
# Berhenti hanya jika variabel memenuhi kondisi
(lldb) breakpoint set --name processItem --condition "item.price > 100.0"

# Berhenti di baris 42 hanya jika index == 500
(lldb) breakpoint set --file DataProcessor.swift --line 42 --condition "index == 500"

# Berhenti hanya jika string berisi nilai tertentu
(lldb) breakpoint set --file NetworkManager.swift --line 87 --condition 'url.absoluteString.contains("api/users")'

Atau di Xcode: klik kanan breakpoint → Edit Breakpoint → isi field "Condition".

Action Breakpoint: Log tanpa Pause

Breakpoint bisa menjalankan action (log, script) dan langsung melanjutkan eksekusi tanpa pause — mirip print() tapi tanpa mengubah kode.

swift
# Tambahkan action ke breakpoint yang sudah ada (ID = 1)
(lldb) breakpoint modify 1 --command "po self" --command "continue"

# Buat breakpoint dengan auto-continue dan log
(lldb) breakpoint set --name fetchUser --command "po userId" --auto-continue true

Di Xcode: Edit Breakpoint → Add Action → Log Message atau Debugger Command, centang "Automatically continue after evaluating actions".

Symbolic Breakpoint

Berhenti di method tertentu di seluruh codebase atau framework, bahkan tanpa source code.

swift
# Berhenti di semua implementasi viewWillAppear di seluruh app + framework
(lldb) breakpoint set --name "viewWillAppear:"

# Berhenti di Swift method tertentu (perlu mangled name atau regular expression)
(lldb) breakpoint set --func-regex ".*processPayment.*"

# Berhenti di semua init dari class tertentu
(lldb) breakpoint set --func-regex "MyClass\.init"

Di Xcode: Debug → Breakpoints → Create Symbolic Breakpoint (Command+Option+\).

Exception Breakpoint

Berhenti tepat saat exception dilempar, sebelum propagasi — bukan saat crash sudah terjadi.

swift
# Berhenti saat ObjC exception dilempar (berguna untuk NSException)
(lldb) breakpoint set --name objc_exception_throw

# Di Xcode: Debug → Breakpoints → Create Exception Breakpoint
# Set: Exception = Objective-C, pada: Throw

Swift Error Breakpoint

swift
# Berhenti saat Swift error di-throw (berguna untuk debugging try/catch)
(lldb) breakpoint set --name swift_willThrow

# Atau di Xcode: Exception Breakpoint → Exception = Swift

Breakpoint dengan Hit Count

swift
# Berhenti hanya pada iterasi ke-100
(lldb) breakpoint set --file DataLoader.swift --line 55 --ignore-count 99

# Di Xcode: Edit Breakpoint → "Ignore" = 99 times before stopping