2011-09-13 31 views
7

Một thời gian trước, tôi đã thay đổi hệ điều hành cá nhân của mình thành linux và môi trường phát triển của tôi đối với KDevelop.Cảnh báo gỡ lỗi KDevelop: Không thể đặt thiết bị đầu cuối điều khiển: Không được phép hoạt động

Tuy nhiên các dự án gỡ lỗi C++ vẫn không hoạt động như mong muốn. phiên bản KDevelop tôi là 4.2.2 (Tôi đã cài đặt nó thông qua quản lý gói)

Mỗi lần tôi nhấn nút "gỡ rối" các ứng dụng được bắt đầu với thông điệp console warning: GDB: Failed to set controlling terminal: Operation not permitted và chức năng gỡ lỗi là không có sẵn.

Mọi ý tưởng đều được chào đón.

(Nếu bạn cần thêm thông tin đừng ngần ngại hỏi)

+0

Chỉ cần một * nitpick * Googling cảnh báo rằng cho hit 6k thực sự. –

+0

Tôi googled rằng cảnh báo nhưng tôi đã không thể sửa chữa nó-đây là lý do tại sao tôi đã viết bài này. – Mythli

+0

Mọi người vẫn sử dụng KDevelop? Tôi đã không chạm vào điều đó trong 10 năm ... –

Trả lời

20

Tôi cũng có vấn đề này, nhưng tôi sử dụng gdb trong KDevelop thưa thớt đủ đã không làm phiền tôi được nêu ra. Đây là nhật ký của tôi về việc sửa lỗi:

Nhìn qua mã nguồn của GDB 7.3.1 cho thấy rằng thông báo này được in khi GDB cố gắng đặt TTY chính thành tse-tty mới được tạo (xem gdb/stream). c, dòng 683-740). Đặc biệt, một cuộc gọi đến ioctl với yêu cầu TIOCSCTTY không thành công với lỗi quyền.

Với ý nghĩ này, tôi đã xem xét mã nguồn hạt nhân Linux để xem điều gì có thể gây ra lỗi. Một chút tìm kiếm cho thấy rằng nó cuối cùng sẽ biến thành một cuộc gọi đến tiocsctty(). Các bình luận từ tiocsctty đó là quan trọng ở đây:

/* 
* The process must be a session leader and 
* not have a controlling tty already. 
*/ 

Vì chỉ có lý do khác, nó có thể thất bại với EPERM là nếu tty rằng GDB tạo ra thực sự là một tty kiểm soát cho khác quá trình (mà dường như rất khó), Tôi nghĩ rằng nó hợp lý để giả định rằng GDB không phải là một nhà lãnh đạo phiên. Đủ công bằng, nó được phát triển bởi KDevelop sau khi tất cả!

Vì vậy: Tôi đã thử không khởi chạy phiên GDB trong thiết bị đầu cuối bên ngoài và hoạt động. Đã thu hẹp sự cố.

Ban đầu, dòng thiết bị đầu cuối bên ngoài được đặt thành konsole --noclose --workdir %workdir -e %exe. Thay đổi điều này thành terminator -e %exe tạo sự khác biệt nhỏ: KDevelop cảnh báo tôi rằng

GDB cannot use the tty* or pty* devices. 
Check the settings on /dev/tty* and /dev/pty* 
As root you may need to "chmod ug+rw" tty* and pty* devices and/or add the user to the tty group using "usermod -G tty username". 

Tôi đã kiểm tra quyền của mình; người dùng của tôi là một phần của nhóm tty và tất cả các tệp có liên quan đều có thể đọc và ghi được.

Việc tìm hiểu mã nguồn KDevelop cho thấy cách KDevelop thực sự thiết lập thiết bị đầu cuối. Nó chạy tập lệnh shell

tty > FIFO_PATH ; trap "" INT QUIT TSTP ; exec<&-; exec>&-; while :; do sleep 3600;done 

và sau đó thiết lập GDB để sử dụng thiết bị đầu cuối mà nó đọc từ FIFO_PATH. (Tên của tôi, nhân tiện, không phải là cái mà KDevelop sử dụng.) Vấn đề (tốt nhất tôi có thể nói) là gdb không được khởi chạy như một phần tử con của kịch bản lệnh shell, và do đó không thể sử dụng nó làm tty chính của nó.

Tôi không cảm thấy muốn vá KDevelop để thực hiện công việc này đúng cách (hoặc tìm kiếm những gì thực sự khiến việc này ngừng hoạt động ngay từ đầu ...), vì vậy tốt nhất tôi có thể đề xuất tại thời điểm này là đơn giản là không sử dụng thiết bị đầu cuối bên ngoài cho mục đích gỡ lỗi.

Chúc may mắn! Tôi sẽ cập nhật nếu tôi thấy bất kỳ điều gì hữu ích.

+2

và bạn chỉ nhận được +54 cho thư trả lời của mình ?! dude mà đi trên twitter của tôi ngay lập tức! Thật là một phản hồi tốt đẹp/hoàn hảo –

+0

tiếc là không sử dụng một thiết bị đầu cuối bên ngoài không phải là một lựa chọn cho mọi người gỡ lỗi một ứng dụng ncurses – Daniel

0

Trong trường hợp bạn đã nhận lỗi:

"Can't receive konsole tty/pty. Check that konsole is actually a terminal and that it accepts these arguments"

RUN> CẤU HÌNH LAUCHERS> (Xem hình dưới đây tên dự án của tôi là "vòng".)
gì làm việc cho tôi là để bỏ chọn hộp kiểm "Sử dụng bên ngoài Thiết bị đầu cuối". Tìm thấy trong tab "Compiled Binaries".

RUN > Configure Laucher

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