2012-03-12 47 views
17

Tôi đang gỡ lỗi chương trình bằng gdb. Đầu tiên, tôi load thực thi của mình, sau đó tôi continue để chạy chương trình. Đôi khi tôi muốn gián đoạn thực hiện chương trình của tôi, vì vậy tôi làm Ctrl + C.gdb: thoát khỏi chương trình mà không thoát khỏi gdb

Vấn đề của tôi là việc này đóng cả hai chương trình và gdb của tôi là. Làm thế nào tôi có thể thoát khỏi chương trình của tôi mà không thoát khỏi gdb?

+4

Điều đó không được phép xảy ra; Ctrl-C chỉ là nghĩa vụ ** ngắt ** (không chấm dứt) chương trình của bạn, và nó chắc chắn không phải là chấm dứt gdb. Bạn đang sử dụng môi trường nào? – trojanfoe

+1

Tôi đang sử dụng Cygwin. Kỳ dị. – Randomblue

Trả lời

4

Có vẻ như trong Windows, bạn phải sử dụng Ctrl-Break không phải Ctrl-C. Xem trang này page.

Trích:

chương trình MS-Windows mà gọi SetConsoleMode để tắt ý nghĩa đặc biệt của tổ hợp phím 'cái Ctrl-C' không thể bị gián đoạn bằng cách gõ C-c. Vì lý do này, gdb trên MS-Windows hỗ trợ C- làm một chuỗi khóa ngắt gián đoạn thay thế , có thể được sử dụng để làm gián đoạn trình gỡ lỗi ngay cả khi nó bỏ qua C-c.

+1

Cảm ơn. Điều này vẫn thoát GDB. Bây giờ khi nó bỏ nó viết "Quit (lõi đổ)" – Randomblue

+0

@ Randomblue Oh blimey - dường như không vui lắm. Tôi không biết những gì để đề nghị, khác hơn là chuyển sang trình biên dịch Microsoft có lẽ (họ được miễn phí với Windows SDK). – trojanfoe

+0

@Randomblue bạn có chạy các công cụ từ giao diện điều khiển 'cmd' hoặc' sh' không? Là chương trình gỡ lỗi Cygwin hoặc Win32 bản địa? (đối với bản ghi: là 'gdb' Cygwin hoặc Win32?;)) –

2

Lần đầu tiên chạy chương trình (không phải từ bên trong gdb), sau đó tìm pid của nó.

Trong một hệ vỏ khác, chạy gdb --pid=<your program's pid>. Điều này gắn gdb vào một chương trình đang chạy. Nó dừng việc thực hiện chương trình, vì vậy hãy phát hành c để tiếp tục.

Bây giờ thoát khỏi chương trình của bạn, phiên gdb của bạn sẽ ở lại đó.

+0

Chương trình của tôi đang chạy trên máy chủ từ xa. (Một chip ARM.) – Randomblue

17

Bạn đã thử sử dụng kill từ bên trong gdb chưa?

+0

Có. Nhưng sau khi 'tiếp tục' tôi không chạy đến dấu nhắc lệnh gdb, vì vậy không có gì xảy ra. – Randomblue

+0

Cách @trojanfoe cho biết, Ctrl-C chỉ nên ngắt chương trình của bạn, do đó bạn sẽ có lại giao diện điều khiển gdb. Tuy nhiên, hãy thử sử dụng 'start' để bắt đầu chương trình của bạn. Việc thực thi nên dừng ở đầu hàm 'main'. Sau đó sử dụng 'kill' để giết chương trình của bạn. – Saphrosit

+0

Khi tôi thử 'bắt đầu' tôi nhận được" Không có bảng biểu tượng nào được tải. Sử dụng lệnh "tệp". " – Randomblue

12

Sử dụng ctrl-c để làm gián đoạn ứng dụng. Sau đó chạy "tín hiệu SIGINT" từ dấu nhắc GDB, sẽ gửi tín hiệu này đến ứng dụng của bạn, làm cho nó làm những việc giống như bình thường khi bạn thực hiện ctrl-c từ dòng lệnh.

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