2013-03-28 38 views
14

Tôi đang chiến đấu với Eclipse (trong Windows) để làm cho nó kết nối với hộp Linux của tôi và biên dịch và gỡ lỗi mã C++ ở đó từ xa.Gỡ lỗi từ xa các ứng dụng C++ với Eclipse CDT/RSE/RDT

Những gì tôi đã làm việc:

  • CDT/RSE/RDT cài đặt (Eclipse Juno, CDT 8.1.2, PTP (RDT) 6.0.4, RSE 3.4)
  • RDT-server chạy trên Linux hộp (perl ./daemon.pl 4075)
  • tạo ++ dự án C địa phương (Makefile dựa)
  • biên dịch và debug C++ địa phương dự án
  • tạo các dự án từ xa (sử dụng "Linux" kết nối đến RDT-server)
  • biên dịch các dự án từ xa (Makefile dựa)

Một số điều của nhãn hiệu tôi có thể làm (không có Eclipse):

  • "từ xa" debug dự án biên soạn của tôi: ssh mybox 'cd /path/to/project; gdb main'
  • bắt đầu gdbserver: ssh mybox 'cd /path/to/project; gdbserver fqdn:10000 main'

Điều gì không hoạt động: Gỡ lỗi trong Eclipse

  • debug thông qua "ứng dụng C++" Lỗi: Chương trình không quy định (vì tôi có một không có mã địa phương)
  • debug thông qua "C++ từ xa" Lỗi: Chương trình không quy định (Tôi cần địa phương mã cho rằng)
  • debug thông qua "C++ đính kèm" (Debugger: "gdbserver")
    • gdbserver chạy trên linuxbox
    • gdb không thể nói chuyện với gdbserver (Cygwin gdb 7.5, linux gdb/gdbserver 7.3); Cảnh báo : Kiến trúc bị từ chối mô tả do mục tiêu cung cấp.
  • gỡ lỗi qua "C++ attach" (Debugger: "gdb") sẽ cố gắng đính kèm vào các quy trình Windows của tôi.

Những thứ khác mà có thể gây ra vấn đề:

  • Tôi đang sử dụng ssh nhị phân được cung cấp với MSYS/Git (không phải trên PATH)
  • Cygwin không phải là trên PATH

tôi thực sự muốn thực hiện gỡ lỗi từ xa trong Eclipse cho các dự án C++ của tôi. Bạn có bất cứ đề xuất nào để tiến hành từ đây không?

Trả lời

1

"debug via "C++ remote" Error: Program not specified (do I need local code for that?)"

Có, vì biểu tượng được tải từ bản sao mã cục bộ.

Trong tab trình gỡ lỗi của loại cấu hình khởi chạy này, bạn sẽ tìm thấy các cài đặt cho máy chủ và cổng từ xa. Sử dụng tên máy và cổng bạn chỉ định khi bạn khởi động gdbserver.

AFAIK điều này sẽ vẫn không hoạt động khi gdb chạy trên máy sổ cục bộ của bạn sẽ không hỗ trợ gỡ lỗi chương trình linux. Bạn sẽ cần một cross build của gdb (được cấu hình và xây dựng với host = mingw-or-something và target = linux).

+0

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

1

Thật không may, câu hỏi này chưa đưa ra giải pháp mong muốn. Tuy nhiên, bạn có thể quan tâm đến cách tôi thực sự "giải quyết" vấn đề:

Chúng tôi hiện đang phát triển trực tiếp trên các hộp Linux, làm mọi thứ từ xa. Chúng tôi thiết lập người dùng máy tính để bàn trên các hộp Linux và đăng nhập qua VNC để chạy Eclipse và sử dụng nó làm giao diện người dùng cho gdb. Mặc dù VNC không phải là giải pháp tốt nhất (có thể chúng tôi thử NX sau) giải pháp này giải phóng chúng tôi khỏi mọi sự cố với gdbserver hoặc RSE/RDT.

1

Tính đến bây giờ (Luna M6), Eclipse CDT + RDT + RSE có vẻ là một chuỗi thiếu một số liên kết khi bạn cần phải:

  • Run IDE trên máy tính để bàn của bạn
  • Sử dụng toolchain từ xa trên hệ thống mục tiêu để xây dựng thay vì cài đặt một chéo toolchain địa phương
  • Tự động hóa Debug và chạy được thực hiện trên hệ thống từ xa bằng một nhấp chuột duy nhất (bắt đầu gdbserver, đính kèm với nó, và cung cấp giao diện điều khiển đầu ra)

Những yêu cầu này khá phổ biến hiện nay liên quan đến sự phong phú của các bo mạch Linux ARM như Raspberry Pi và OLinuxino. Các bo mạch này thường có đủ tài nguyên để chạy một chuỗi công cụ nhưng không đủ để cung cấp một môi trường máy tính để bàn từ xa để chạy IDE từ xa.

giải pháp cuối cùng của tôi: Sau nhiều ngày nỗ lực, cuối cùng tôi đã từ bỏ Eclipse CDT + RDT + RSE cho NetBeans C/C++ Remote Development Environment mà hoạt động như một nét duyên dáng cho tôi.

1

Bạn có thể thử this plugin với Eclipse, cho phiên bản ứng dụng song song here is a link

Nó hoạt động tốt trong việc phát triển từ máy tính Windows để chương trình trên Linux

0

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 .

    enter image description here

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-hostname1234)

    enter image description here

    enter image description here

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?

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