Tôi đang gỡ lỗi tĩnh đa luồng x86-64 C++ ứng dụng trên Linux.gdb bước không hoạt động như mong đợi
Tôi có thể đặt điểm ngắt trên các chức năng và dừng lại trên chúng và tôi có thể đi từng bước trên cơ thể chức năng. Nhưng khi tôi cố gắng bước vào một hàm khác, gdb không dừng lại ở lúc bắt đầu và có vẻ như nó chỉ tiếp tục thực hiện. Khi tôi gián đoạn thực hiện chương trình, gdb đi để phá vỡ trạng thái và trở nên không sử dụng được:
(gdb) bt
Target is executing.
(gdb) c
Continuing.
Cannot execute this command while the selected thread is running.
(gdb)
Là một workaround tôi có thể sử dụng stepi
nhiều lần thay vì step
, stepi
công trình như mong đợi. Điều gì có thể là lý do của hành vi này? Có cách nào khác ngoài việc sử dụng stepi
không? Tôi đang sử dụng gdb 7.6 và gcc 4.7.1.
Bạn đã biên dịch mục tiêu bằng '-ggdb' và' -O0' chưa? Bạn đã thử quan sát sự khác biệt giữa bước ('s') và tiếp theo (' n')? – Reinderien
@Reinderien, mục tiêu của tôi được biên dịch với '-g' và' -O0'. Làm thế nào tôi có thể quan sát sự khác biệt giữa 's' và' n'? – ks1322
Thử thay đổi từ '-g' thành' -ggdb'. Để thấy sự khác biệt, hãy bước qua gõ 's' (có hiệu quả là" bước vào ") so với' n' (có hiệu quả "bước qua") trong gdb. – Reinderien