2009-10-17 24 views
7

Tôi đã tìm kiếm xung quanh nhưng không thể tìm ra cách người ta có thể in ra trong gdb kết quả của một đánh giá. tức là ví dụ trong mã bên dưới:gdb - cách in kết quả đánh giá cho C++

if (strcmp(current_node->word,min_node->word) > 0) 
     min_node = current_node; 

(ở trên tôi đã cố gắng ra một phương pháp có thể cho kiểm tra thứ tự chữ cái cho các chuỗi, và wasnt hoàn toàn chắc chắn nó hoạt động một cách chính xác)

bây giờ tôi có thể xem min_node và xem nếu giá trị thay đổi nhưng trong mã liên quan nhiều hơn thì điều này đôi khi phức tạp hơn. tôi đã tự hỏi nếu có một cách đơn giản để xem đánh giá của một thử nghiệm trên dòng nơi gdb/chương trình dòng chảy hiện nay là.

cảm ơn rất nhiều!

Trả lời

16

Không có bước đơn cấp độ biểu thức nào trong gdb, nếu đó là những gì bạn đang yêu cầu.

lựa chọn của bạn (từ phổ biến nhất để thường xuyên nhất được sử dụng):

  1. đánh giá biểu thức trong gdb, làm print strcmp(current_node->word,min_node->word). Đáng ngạc nhiên, điều này làm việc: gdb có thể đánh giá các cuộc gọi hàm, bằng cách tiêm mã vào chương trình đang chạy và để nó thực thi mã. Tất nhiên, điều này là khá nguy hiểm nếu các chức năng có tác dụng phụ hoặc có thể sụp đổ; trong trường hợp này, nó vô hại đến nỗi mọi người thường không nghĩ về các vấn đề tiềm ẩn.
  2. thực hiện chỉ dẫn cấp (lắp ráp) một bước (ni/si). Khi lệnh gọi được thực hiện, bạn sẽ tìm thấy kết quả trong thanh ghi, theo các quy ước của bộ xử lý (% eax trên x86).
  3. chỉnh sửa mã để chỉ định các giá trị trung gian cho các biến và chia thành các dòng/báo cáo riêng biệt; sau đó sử dụng thường xuyên một bước và kiểm tra các biến.
+0

tuyệt vời, cảm ơn bạn - điều này sẽ giúp ích cho bạn! – nero

4

bạn có thể chỉ đơn giản là cố gắng gõ vào:

gọi "my_funtion()"

as far as i rember, mặc dù nó sẽ không hoạt động khi một chức năng được inlined.

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