2011-10-18 34 views
9

Tôi đang xem một số mã tháo gỡ và xem một số thứ như 0x01c8f09b <+0015> mov 0x8(%edx),%edi và tôi tự hỏi giá trị của %edx hoặc %edi là gì.Cách in sổ đăng ký tháo gỡ trong bảng điều khiển Xcode

Có cách nào để in giá trị của %edx hoặc các biến lắp ráp khác không? Có cách nào để in giá trị tại địa chỉ bộ nhớ %edx điểm tại (Tôi giả định edx là một thanh ghi có chứa con trỏ đến ... một cái gì đó ở đây).

Ví dụ: bạn có thể in một vật cản bằng cách nhập po trong bảng điều khiển, vậy có lệnh hoặc cú pháp để in sổ đăng ký/biến trong lắp ráp không?

Bối cảnh:

Tôi nhận được EXC_BAD_ACCESS trên dòng này và tôi muốn để gỡ lỗi những gì đang xảy ra. Tôi biết lỗi này liên quan đến quản lý bộ nhớ và tôi đang tìm cách xác định nơi tôi có thể bị thiếu/quá nhiều lần giữ lại/giải phóng/tự động thực hiện cuộc gọi.

Thông tin bổ sung:

Đây là trên IOS và ứng dụng của tôi đang chạy trong trình mô phỏng iPhone.

Trả lời

14

Bạn có thể in một thanh ghi (ví dụ: eax) sử dụng:

print $eax 

Hoặc gọi tắt là:

p $eax 

Để in dạng thập lục phân:

p/x $eax 

Để hiển thị giá trị được chỉ bởi một thanh ghi:

x $eax 

Kiểm tra sự giúp đỡ gdb để biết thêm chi tiết:

help print 
help x 
2

Đó không phải là biến, mà là đăng ký.

Trong GDB, bạn sẽ nhìn thấy giá trị của thanh ghi tiêu chuẩn bằng cách sử dụng lệnh sau:

info registers 

Lưu ý rằng một thanh ghi chứa giá trị số nguyên (32bits trong trường hợp của bạn, như tên đăng ký là tiền tố của e) . Những gì nó đại diện không được biết đến. Nó có thể là một con trỏ, một số nguyên, chủ yếu là bất cứ thứ gì.

Nếu po treo khi bạn cố gắng in giá trị của sổ đăng ký dưới dạng con trỏ, có khả năng giá trị không phải là con trỏ (hoặc giá trị không hợp lệ).

9
(gdb) info reg 
eax   0xe 14 
ecx   0x2844e0 2639072 
edx   0x285360 2642784 
ebx   0x283ff4 2637812 
esp   0xbffff350 0xbffff350 
ebp   0xbffff368 0xbffff368 
esi   0x0 0 
edi   0x0 0 
eip   0x80483f9 0x80483f9 <main+21> 
eflags   0x246 [ PF ZF IF ] 
cs    0x73 115 
ss    0x7b 123 
ds    0x7b 123 
es    0x7b 123 
fs    0x0 0 
gs    0x33 51 

Từ Debugging with gdb:

Bạn có thể tham khảo nội dung đăng ký máy, trong các biểu thức, như biến với tên bắt đầu với `$'. Tên của các thanh ghi khác nhau cho mỗi máy; sử dụng thông tin đăng ký để xem tên được sử dụng trên máy của bạn.

info registers 

In tên và giá trị của tất cả các thanh ghi ngoại trừ điểm nổi đăng ký (trong khung ngăn xếp đã chọn).

info all-registers 

In tên và giá trị của tất cả các thanh ghi, bao gồm cả dấu phẩy động .

info registers regname ... 

In giá trị tương đối của từng tên đăng ký được chỉ định. regname có thể là bất kỳ tên đăng ký nào hợp lệ trên máy bạn đang sử dụng, có hoặc không có chữ '$' ban đầu.

8

Phụ thuộc lên mà Xcode trình biên dịch/debugger bạn đang sử dụng. Đối với gcc/gdb nó

info registers 

nhưng đối với kêu vang/LLĐB nó

register read 
4

Nếu bạn đang sử dụng LLĐB thay vì GDB bạn có thể sử dụng register read

Các vấn đề liên quan