2013-01-03 12 views
6

Tôi mới làm quen với lập trình được nhúng nhưng tôi phải gỡ lỗi một ứng dụng khá phức tạp đang chạy trên một nền tảng nhúng. Tôi sử dụng GDB thông qua giao diện JTAG.Cách gỡ lỗi các vấn đề về bộ nhớ trong ứng dụng nhúng

Chương trình của tôi bị lỗi tại một số điểm theo cách bất ngờ. Tôi cho rằng điều này xảy ra do một số vấn đề liên quan đến bộ nhớ. GDB có cho phép tôi kiểm tra bộ nhớ sau khi hệ thống gặp sự cố không, do đó hoàn toàn không phản hồi?

+2

loại bộ xử lý nào bạn đang sử dụng? – TJD

+0

Bộ xử lý 32 bit của nó được gọi là icyflex1 (http://www.csem.ch/docs/Show.aspx/9224/docname/CSEM-STR08-Page%2023.pdf) và tôi đang sử dụng một chuỗi công cụ dựa trên GNU. – ricc

+2

Thật không may là doc không đề cập đến bất kỳ điều gì về các tính năng của CPU để gỡ lỗi. Như Carl Norum đề cập, bạn thường bắt một ngoại lệ sau đó kiểm tra trạng thái của CPU. Sẽ có một cách cụ thể cho CPU để bạn xác định PC là gì khi bạn nhấn ngoại lệ. Một số bộ xử lý có thanh ghi trạng thái gỡ lỗi/lỗi sẽ cho bạn biết những thứ như địa chỉ xấu được truy cập và nếu đó là mã hoặc bus dữ liệu. – TJD

Trả lời

6

Tùy thuộc vào thiết lập của bạn một chút. Đặc biệt, kể từ khi bạn đang sử dụng JTAG, bạn có thể thiết lập trình gỡ lỗi của bạn lên để ngăn chặn bộ xử lý khi nó phát hiện một ngoại lệ (ví dụ như truy cập bộ nhớ được bảo vệ bất hợp pháp và vv). Nếu không, bạn có thể thay thế trình xử lý ngoại lệ của bạn bằng các vòng lặp vô hạn. Sau đó, bạn có thể hủy đăng ký ngoại lệ theo cách thủ công để xem bộ xử lý đang làm gì gây ra sự cố. Thông thường, bạn sẽ vẫn có quyền truy cập vào bộ nhớ trong tình huống đó và bạn có thể sử dụng GDB để xem trực tiếp hoặc chỉ đổ mọi thứ vào một tệp để bạn có thể xem lại sau.

3

Tùy thuộc vào những gì đã gặp sự cố. Nếu hệ thống chỉ không phản hồi (trong một số vòng lặp vô hạn, bế tắc hoặc tương tự), thì nó thường sẽ trả lời GDB và bạn sẽ có thể nhìn thấy một backtrace (gọi stack), v.v. Nếu hệ thống/bus/cpu đã thực sự bị rơi (ở cấp độ thấp hơn), có thể nó sẽ không phản hồi. Trong trường hợp này, bạn có thể thử thiết lập các điểm ngắt tại các vị trí/biến đáng ngờ và quan sát những gì đang xảy ra. Cũng giả lập (ISS, RTL - nếu có) có thể có ích, để so sánh hành vi với HW.