Sanity kiểm tra với CLI
Trước khi bạn làm bất cứ điều gì, đảm bảo bạn:
- cross biên dịch ứng dụng một cách chính xác và nó chạy. Bạn không nhất thiết cần phải làm điều này bằng Eclipse.
- được GDB gỡ lỗi từ xa hoạt động bình thường từ dòng lệnh
Câu trả lời này giả định rằng bạn có thể làm trên bảng phát triển:
sudo apt-get install gdbserver
gdbserver :1234 path/to/executable
Và trên máy chủ:
aarch64-linux-gnu-gdb \
-ex "target remote board-hostname:1234" \
-ex "file path/to/cross/compiled/executable" \
-ex 'tb main' \
-ex c
và sau đó bước gỡ lỗi mọi thứ một cách chính xác.
Eclipse thiết lập
Tested trong Ubuntu 16,04 máy chủ, Eclipse Oxygen 4.7.0 (tải về từ trang web), gdbserver
7.12, aarch64-linux-gnu-gdb
7.6.
Tôi đã sử dụng thành công tất cả các phương pháp sau:
- thủ
- tự động
- mật khẩu auth
- khóa công khai auth
Manual
Với phương pháp này, chúng tôi phải khởi chạy gdbserver
trên mục tiêu trước khi chạy gỡ lỗi trên Eclipse.
Pro: pha chế cấu hình các kết nối SSH qua Eclipse để cho phép Eclipse
Côn: bạn phải relaunch gdbserver
mỗi khi gỡ lỗi khởi động. Điều này có thể được khắc phục nếu Eclipse hiểu được gdbserver --multi
, nhưng tôi không nghĩ rằng nó có tác dụng?
Do tính đơn giản của nó, tôi khuyên bạn nên sử dụng phương pháp này trước tiên.
Mở cấu hình gỡ lỗi, sau đó tạo "Ứng dụng từ xa C/C++" mới.
Dưới tab "Main":
chọn "Tên", "Dự án" và "C/C++ ứng dụng" như bình thường cho một debug địa phương
tại launcher đáy, nhấp vào "Chọn cài đặt khác", chọn "Sử dụng cài đặt cấu hình cụ thể" và chọn "Trình gỡ lỗi gỡ lỗi từ xa GDB (DSF)"
Tại sao chúng tôi thực hiện việc này: đầu tiên tự động kết nối với bảng SSH và khởi chạy gdbserver
cho bạn .
Dưới tab "Debugger":
"GDB debugger": tương tự như sử dụng từ CLI trên máy chủ, aarch64-linux-gnu-gdb
ví dụ này
Tiểu tab "Kết nối": đặt tên máy chủ và cổng được chuyển đến máy chủ lưu trữ trên CLI (board-hostname
và 1234
)
Cuối cùng, tay khởi động gdbserver
trên mục tiêu cũng giống như chúng tôi đã làm từ CLI:
gdbserver :1234 path/to/executable
và bắt đầu gỡ rối từ Eclipse bình thường.
Bạn phải khởi động lại gdbserver
mỗi khi bạn chấm dứt chương trình.
tự động với mật khẩu auth
Đây là phương pháp tốt nhất cho bo mạch phát triển, mà đã cố định mật khẩu công chúng biết đến.
Kết nối với mục tiêu bằng SSH và mật khẩu, đồng thời tự động khởi động gdbserver
trên mục tiêu, rất thuận tiện!
Mục tiêu gdbserver
stdout chuyển đến cửa sổ "Console" của Eclipse, làm giảm thêm chuyển đổi cửa sổ.
Trong Eclipse thiết lập:
tự động với công chúng chính
Rất giống với xác thực mật khẩu, ngoại trừ việc bạn phải đi đến: "Kết nối", "New", và chọn "Công khai xác thực dựa chìa khóa"
Ưu điểm:
- vượt qua "an toàn lưu trữ đã không thể lưu các mật khẩu chủ" nếu bạn có một khóa bí mật được mã hóa (không an toàn, nhưng tốt cho
- cho các máy chủ, bạn có thể có đã thiết lập công quan trọng
Nhược điểm:
- thiết lập quan trọng có thể làm tổn thương lần đầu tiên
- phải làm lại thiết lập quan trọng bất cứ khi nào devboard được nấu
SSH có thể kết nối mà không cần mật khẩu nếu bạn:
Trước khi sử dụng phương pháp này, hãy đảm bảo rằng các khóa được ủy quyền của bạn hoạt động từ dòng lệnh, nghĩa là bạn hiện có thể thực hiện:
ssh [email protected]
mà không cần nhập bất kỳ mật khẩu nào.
Thay đổi thư mục làm việc hiện tại của quá trình
How to set the current working directory of the program when remote debugging with gdbserver Automatic Launcher in Eclipse CDT?
OK, tôi cũng nghĩ rằng, một cross-xây dựng sẽ là quá phức tạp. Tôi đang cố gắng đi con đường từ xa tinh khiết vì tôi không muốn xây dựng bất cứ thứ gì trên máy tính Windows, điều này sẽ dẫn đến nhiều vấn đề hơn (và sẽ mãi mãi có phần mềm lớn hơn trên máy tính xách tay của công ty) – Juve