2012-03-21 25 views
13

Tôi đang gỡ lỗi một phần mềm (nhúng). Tôi đã đặt một điểm ngắt trên một hàm, và vì một lý do nào đó, một khi tôi đã đạt đến điểm ngắt đó và continue Tôi luôn quay trở lại hàm (đó là hàm khởi tạo chỉ được gọi một lần). Khi tôi loại bỏ các breakpoint và continue, GDB nói với tôi:Tín hiệu nhận được chương trình SIGTRAP, Dấu vết/dấu ngắt điểm

Program received signal SIGTRAP, Trace/breakpoint trap.

Kể từ khi tôi đã làm việc với breakpoint, tôi giả sử tôi rơi vào một "cái bẫy breakpoint". Một cái bẫy breakpoint là gì?

+0

Thêm tiêu đề chi tiết hơn. Nó sẽ giúp người dùng khác –

+0

Đây cũng là loại câu hỏi bạn có thể đăng trên [electronics SE] (http://electronics.stackexchange.com). – Kortuk

+1

@Kortuk Trong cách thức này QB GDN liên quan đến điện tử? : -o –

Trả lời

8

Bẫy điểm dừng chỉ có nghĩa là bộ vi xử lý đã đạt điểm ngắt. Có hai khả năng cho việc này xảy ra. Nhiều khả năng, mã khởi tạo của bạn đang bị tấn công vì CPU của bạn đang đặt lại và nhấn lại điểm ngắt. Khả năng khác sẽ là mã mà bạn đặt breakpoint thực sự chạy ở những nơi khác với khởi tạo. Đôi khi với tối ưu hóa trình biên dịch tích cực nó có thể khó để nói chính xác mã nào mà breakpoint của bạn ánh xạ tới và đường dẫn thực thi nào có thể tới đó.

+0

Nếu CPU reset, GDB sẽ vẫn còn sống và được gắn vào thực thi của người dùng? –

+1

@PavanManjunath, có thể cho CPU để đặt lại và sau đó nhấn điểm ngắt mà không làm phiền phiên GDB. – TJD

-3

Nếu bạn sử dụng V BAT làm nguồn dự phòng và điện áp dự phòng của bạn sẽ thấp hơn 1,65V thì bạn sẽ gặp phải vấn đề tương tự sau khi kết nối với nguồn điện.

Trong trường hợp này, bạn phải ngắt kết nối tất cả nguồn điện và kết nối lại với mức điện áp chính xác. Sau đó, vấn đề với gỡ lỗi biến mất.

+2

Điều này hoàn toàn phụ thuộc vào vi điều khiển/bộ vi xử lý được sử dụng. – Dean

6

Khả năng khác tôi có thể nghĩ đến là:

1.Your quá trình đang chạy hơn hơn một thread.

Ví dụ: - 2 nói x & y.

2. Chủ đề y truy cập điểm ngắt nhưng bạn có đính kèm gdb vào chủ đề x.

Trường hợp này là bẫy Trace/breakpoint.

+1

Đây là một triệu chứng phổ biến khi sử dụng các khung kiểm tra đơn vị để chia rẽ các trường hợp kiểm tra. Tốt để biết! –

1

Tôi gặp sự cố này khi chạy dự án linux trong Visual studio 2015 và gỡ lỗi từ xa. Giải pháp của tôi là project_properties -> Thuộc tính cấu hình -> Gỡ lỗi -> Chế độ gỡ lỗi và thay đổi giá trị từ "gdbserver" thành "gdb"

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