Advanced Debug Part 3

Tiếp nối 2 phần trước, phần này mình sẽ nói về công cụ debug khá là quan trọng và mạnh mẽ. Nó giúp chúng ta tìm ra những chỗ thay đổi giá trị của biến, để tìm ra những sự thay đổi bất thường của biến trong chương trình.

Watchpoint là gì

Watchpoint là một loại breakpoint được dùng để debug chương trình. Nó cho phép ta dừng chương trình tại dòng lệnh đọc/ghi một vùng nhớ nào đó.

Như vậy dùng watchpoint sẽ cho phép ta theo dõi một vùng nhớ nào đó được đọc/ghi vào khi nào và tại đâu.

Tạo watchpoint bằng Xcode

Khi chương trình dừng, tại khu vực Variables View ta nhấp chuột phải vào biến và chọn watch <tên biến>.

Như vậy là ta đã tạo một watchpoint. Và bất cứ khi nào chương trình thực hiện thay đổi vùng nhớ của pointer _activeRange thì chương trình sẽ dừng lại.

Khi chương trình dừng lại, ở Console sẽ hiển thị cho chúng ta biết giá trị cũ và giá trị mới là gì.

Tạo watchpoint bằng lldb

Watchpoint có 3 loại là read, write, và read_write. Khi chúng ta watch bằng Xcode, thì sẽ là loại write. Để tạo được những loại khác như readread_write thì chúng ta phải dùng lệnh lldb.

Khi chương trình dừng, chúng ta dùng lệnh sau ở lldb để tạo watchpoint lắng nghe read_write biến _activeRange

watchpoint set variable _activeRange -w read_write

Tham số -w dùng để xác định kiểu watchpoint là read, write hay read_write.
Ngoài ra, chúng ta có thể tạo watchpoint tại một địa chỉ xác định trước như sau:

watchpoint set expression -- <Address>

Tổng kết

Watchpoint là một kỹ thuật khá hay và mạnh mẽ để giúp chúng ta debug dễ dàng hơn.

Tham khảo thêm:

https://lldb.llvm.org/use/tutorial.html
https://www.objc.io/issues/19-debugging/lldb-debugging/

Leave a Reply