2012-05-04 33 views
14

tôi biết câu trả lời này, tôi đưa nó lên đây để người khác nhìn thấy nóEclipse CDT đa luồng gỡ lỗi không tối ưu - làm thế nào để chạy một chủ đề độc quyền?

Nếu bạn sử dụng Eclipse CDT, bạn có thể hiểu được nhật thực đó không phải là một trình gỡ lỗi, nó chỉ là một ứng dụng front- kết thúc, cụ thể cho GDB. Vì vậy, khi gỡ lỗi chương trình C++, bạn thực sự chỉ sử dụng GDB một cách thoải mái hơn. Nếu bạn phải debug một chương trình đa luồng trong Eclipse CDT, bạn sẽ nhận ra rằng mọi thứ nhanh chóng trở nên bận rộn bởi vì khi bạn nhấn breakpoint, tất cả các luồng dừng lại và khi một cố gắng thực hiện một dòng trong một chuỗi cụ thể, nó cũng chạy các chủ đề khác. Để cho nó hoạt động đúng, các luồng phải có khả năng chạy một cách tùy ý và toàn bộ để khi lập trình thực thi một dòng, nó chỉ thực thi luồng cụ thể.

Vì vậy, theo mặc định, cài đặt của gdb theo mặc định sẽ tắt tính năng "khóa lịch biểu". Nếu bạn gỡ lỗi các ứng dụng đa luồng, bạn sẽ hiểu rằng điều này phải nằm trong GDB để có được hành vi mong muốn. Làm cách nào để chạy lệnh này:

set scheduler-locking on 

trong GDB trong eclipse CDT?

Trả lời

3

Có lẽ nếu bạn thêm đoạn mã gdb sau đó có thể đặt biến khi chương trình dừng lại và biến nó đi nếu bạn tiếp tục:

define hook-step 
set scheduler-locking on 
end 
define hookpost-step 
set scheduler-locking off 
end 
define hook-run 
set scheduler-locking off 
end 
define hook-continue 
set scheduler-locking off 
end 
+2

Bạn thực thi chính xác kịch bản GDB từ bên trong Eclipse như thế nào? – rbaleksandar

3

Ít nhất một cách để làm điều đó chắc chắn giải quyết được vấn đề là biết cách điều hướng bộ tính năng khổng lồ mà nhật thực cung cấp. Thông thường, khi một chương trình bắt đầu, eclipse CDT sẽ chuyển cửa sổ giao diện điều khiển (nếu bạn mở nó ra, thường là ở phía dưới) để hiển thị đầu vào/đầu ra của chương trình.

Nhưng bạn có thể thay đổi điều này nếu bạn không biết-thấy điều này image. Nút đó trên thứ hai đến cuối cùng bên phải màu xanh trông giống như màn hình, bạn có thể chọn bảng điều khiển nhập liệu GDB. Nó cũng được thảo luận trong this thread.

Từ đó chỉ cần nhập lệnh.

giải quyết, nhưng cần một giải pháp TỐT HƠN

Nhưng bây giờ điều này đã được giải quyết, để giải quyết nó một cách tốt nhất như một vấn đề convience; phải gõ thiết lập lịch trình khóa trên mỗi khi một chương trình bắt đầu là ngớ ngẩn. Nhưng vấn đề với tải một tập tin gdbinit là tập tin gdbinit được lấy nguồn trước khi nhật thực đã thiết lập chương trình cho gdb để giải quyết. Đây là một vấn đề, vì nó làm cho khung nhìn trình gỡ lỗi treo trong nhật thực, như gdb than phiền. Để hiểu những gì đang xảy ra, hãy thử và kích hoạt gdb, sau đó đưa ra lệnh mà không cần tải một tệp nhị phân để thực thi. Nó không thành công-vậy làm thế nào để thiết lập này như là một tùy chọn đó là dính?

+0

Hi Adam, bất kỳ câu trả lời chưa? – ransh

+0

Vâng, tôi đoán những gì tôi đang tìm kiếm là dành cho các nhà phát triển CDT nhật thực để chú ý đến những gì tôi đã nói; Tôi không phải là một lập trình viên nhật thực. Một nút của một số loại sẽ được tốt đẹp –

+0

Cảm ơn, bạn cũng thấy hành vi mà sau khi loại bỏ tất cả các điểm dừng nó vẫn dừng lại ở cùng một vị trí? – ransh

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