2011-12-15 7 views
9

Tôi có câu hỏi gdb/gdbserver chung. Tôi đang cố gắng gỡ lỗi một ứng dụng nhúng Linux bằng tay bằng gdb trên máy chủ và gdbserver trên mục tiêu từ xa. Tôi có thể bước qua các dòng mã ở đầu chính. Tuy nhiên, gdb (hoặc gdbserver) dường như bị lạc sau khi các cuộc gọi đến các chức năng thư viện được chia sẻ. Ngay cả khi tôi đặt một điểm dừng sau khi cuộc gọi và sử dụng tiếp tục, nó không bao giờ chạm đến điểm ngắt. Tôi biết tôi không có biểu tượng trong các thư viện được chia sẻ và thực sự không quan tâm để bước vào chúng. Không nên tôi có thể bước qua các cuộc gọi thư viện trong gdb thành công ngay cả khi không có các biểu tượng trong các thư viện được chia sẻ hoặc ít nhất là tiếp tục đến điểm ngắt tiếp theo? Hay điều này cho thấy một loại vấn đề khác?Bước qua các cuộc gọi thư viện với gdb/gdbserver

+0

Bạn có bằng chứng từ một nguồn mà chỉ ra rằng nó đang thực hiện các hướng dẫn (s) tại breakpoint? Thay vì xem nguồn cấp cao, hãy xem phần tháo gỡ để xem qua một số giải thích 'gdb'. –

+0

Sự cố có xảy ra với một đối tượng được chia sẻ cụ thể hay bạn có thể tạo một "trường hợp thử nghiệm" tầm thường minh họa sự cố không? –

+0

Xin lỗi vì thời gian phản hồi dài. Mã đang chạy đúng trên thiết bị được nhúng. Nó chỉ là gdb hoặc gdbserver đang bị mất. Một khi một cuộc gọi được thực hiện cho một chức năng thư viện nó mất theo dõi vị trí của nó trong chương trình và không bao giờ có thể lấy lại quyền kiểm soát. Tôi không nghĩ rằng nó nhất thiết là tất cả các chức năng thư viện kể từ khi nó chạm một, mở(), rằng nó không thể vượt qua sớm trong thực hiện. – Jim

Trả lời

1

Điểm ngắt theo địa chỉ, thay vì theo biểu tượng, đôi khi đáng tin cậy hơn.

Hãy thử điều này:

 
(gdb) x/i my_func 
0x12345678 <my_func> ... 
(gdb) break *0x12345678