2010-11-28 69 views
17

Tôi đang gỡ lỗi chương trình bằng gdb. Bất cứ khi nào tôi bỏ lỡ một điểm dừng hoặc quyết định thêm một điểm quan sát khác, tôi phải giết quá trình và chạy lại nó. Để đính kèm gdb hiện tại vào nó, tôi sử dụng attach <pid>. Tuy nhiên, tôi phải tìm ra pid của quy trình mới.Làm cách nào để thực hiện các lệnh bên ngoài từ dấu nhắc lệnh gdb?

Cách tôi làm điều đó hôm nay là tạm ngưng gdb, lấy pid với ps -C <program_name> và sau đó quay lại gdb để đính kèm vào nó.

Có cách nào để chạy một lệnh unix từ dấu nhắc lệnh gdb mà không thoát khỏi vào vỏ, vì vậy mà tôi có thể làm một cái gì đó như thế này từ bên trong gdb:

attach `ps -C <program_name>` 

tôi đang làm việc trên Linux.

Trả lời

18

(gdb) giúp vỏ
Execute phần còn lại của dòng như một lệnh shell. Không có đối số , hãy chạy trình bao kém hơn.

Sau khi hoàn tất, bạn có thể sử dụng 'thoát' để quay lại gdb.

9
gdb$ shell 

shell$ execute_your_commands 

shell$ exit 

gdb$ you_have_returned_back_to_gdb_prompt 
4

Bạn chỉ có thể sử dụng shell tiếp theo là lệnh bạn muốn thực hiện, ví dụ .:

gdb$ shell g++ tsort.c -o tsort 

Đây chỉ là một hình thức ngắn gọn về câu trả lời trước.

+0

Trong chế độ này, gdb dường như không nhận hoặc có thể báo cáo sự cố khi có kết xuất lõi. – Derek

1

Chỉ để mở rộng câu trả lời được chấp nhận, lối tắt cho shell!.

(gdb) trợ giúp!

Thực hiện phần còn lại của dòng dưới dạng lệnh trình bao. Không có đối số, chạy vỏ kém hơn.

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