gdb không thành công với không thể tìm thấy cổng tác vụ Mach cho lỗi process-id


138

Ứng dụng của tôi chạy tốt nhưng gdb không thể gỡ lỗi với lỗi sau

(gdb) run
Starting program: /path/to/app 
Unable to find Mach task port for process-id 83767: (os/kern) failure (0x5).

Tôi đang dùng OS X Lion. Phiên bản GDB là

$ gdb --version
GNU gdb 6.3.50-20050815 (Apple version gdb-1752) (Sat Jan 28 03:02:46 UTC 2012)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin".

Tôi nghĩ rằng bài đăng này có thể giúp: stackoverflow.com/questions/10221448/ .
Codie CodeMonkey

Câu trả lời:


64

Trong Snow Leopard và các phiên bản Mac OS mới hơn, không đủ để mã hóa gdbthực thi.

Bạn phải làm theo hướng dẫn này để làm cho nó hoạt động: http://www.opensource.apple.com/source/lldb/lldb-69/docs/code-signing.txt

Hướng dẫn giải thích cách thực hiện lldb, nhưng quy trình này hoàn toàn giống nhau gdb.


12
Các hướng dẫn đó không hoạt động với tôi trên OSX 10.9.2 với MacPorts, nhưng điều này đã làm: sourceware.org/gdb/wiki/Bu kiếmOnDarwin
Simpleuser

Nó hoạt động! Nhưng bạn có thể vui lòng giải thích những gì sudo security add-trustdòng đang làm? Tôi có thể xóa các .certập tin từ máy tính để bàn của tôi bây giờ?
Sreejith Ramakrish Nam

9
codesign -s gdb_codesign `which gdb` giúp đỡ sau hướng dẫn này
tổng hợp

Hoặc sudo codesign -s gdb_codesign `which gdb-apple` trên macOS sierra.
sdive

3
Đối với HĐH mới nhất, liên kết đã hoạt động
yuxuan

144

Nó hoạt động khi tôi thay đổi sudo gdb executableFileName! :)


2
Cảm ơn. Việc ký mã cộng này được yêu cầu để gdb hoạt động. Tôi đã cấp quyền truy cập root gdb (như được mô tả ở đây stackoverflow.com/questions/10476154/ ) vì vậy tôi không phải gõ sudo mỗi lần. Chỉnh sửa - Tìm thấy cách tiếp cận tốt hơn tại đây: stackoverflow.com/a/10441587/305149
Aneil Mallavarapu

14
Chạy nó như root? Bạn nghiêm túc chứ? "Giải pháp" tồi tệ nhất.
Equidamoid

7
@Equidamoid Tại sao nó lại rất tệ khi chạy gdbbằng root? Tôi chỉ tò mò vì nó chỉ là một trình sửa lỗi.
NGƯỜI DÙNG NÀY CẦN GIÚP

Điều gì sẽ xảy ra nếu bạn chạy nó như một root? Đó là mã bạn đã viết và tôi không hiểu hậu quả
CẮT ICE

4
@COLDICE nói chung, bạn không muốn chạy các quy trình với các đặc quyền được nâng cấp (đặc biệt là được leo thang lên trên cùng với quyền root) vì nói chung họ không cần quyền truy cập để sửa đổi mọi thứ trên hệ thống hoặc mở các cổng thấp hơn 1024 (các cổng cao hơn có thể được sử dụng bởi người dùng không hệ thống / không root). Ngay cả khi bạn "tin tưởng" mã của riêng mình, điều đó không có nghĩa là bạn đã không phạm sai lầm khiến nó rm -rf /bị phá hủy hoặc một thứ gì đó tương tự phá hủy khi bạn ghi đè lên một số cấu hình / nhị phân mà máy tính của bạn dựa vào để khởi động và hoạt động bình thường.
shaunhusain

32

Bạn cần tạo chứng chỉ và ký gdb:

  • Mở ứng dụng Keychain Keychain Access ((Ứng dụng / Tiện ích / Keychain Access.app)
  • Mở menu / Truy cập Keychain / Trợ lý chứng chỉ / Tạo chứng chỉ ...
  • Chọn một tên (gdb-cert trong ví dụ), đặt Loại nhận dạng cá nhân và thành Root Tự ký gốc, đặt Bộ chứng nhận Loại đối với Mã Mã ký Đăng ký và chọn Chú thích ghi đè mặc định. Nhấp vào Tiếp tục Quảng cáo. Bạn có thể muốn kéo dài thời gian 365 ngày được xác định trước lên 3650 ngày.
  • Nhấp chuột nhiều lần vào phần mềm Tiếp tục và cho đến khi bạn truy cập vào Chỉ định vị trí cho màn hình Chứng nhận, sau đó đặt Keychain Keychain thành Hệ thống.
  • Nếu bạn không thể lưu trữ chứng chỉ trong móc khóa của Hệ thống Cảnh sát, hãy tạo chứng chỉ đó trong móc khóa Đăng nhập của Đăng nhập, sau đó xuất nó. Sau đó, bạn có thể nhập nó vào móc khóa của Hệ thống.
  • Trong các móc khóa, chọn hệ thống, và bạn sẽ tìm thấy chứng chỉ mới của mình. Sử dụng menu ngữ cảnh cho chứng chỉ, chọn Tải xuống Nhận thông tin, mở mục Tin tưởng vào mối quan hệ và đặt Mã xác nhận Đăng nhập vào thành Luôn luôn tin tưởng.
  • Bạn phải thoát khỏi ứng dụng Truy cập Keychain Keychain để sử dụng chứng chỉ và khởi động lại dịch vụ đã được giao nhiệm vụ của Cameron bằng cách giết tiến trình hiện tại của nhiệm vụ đã được thực hiện. Ngoài ra, bạn có thể khởi động lại máy tính của bạn.
  • Cuối cùng, bạn có thể đăng nhập gdb:

    sudo codesign -s gdb-cert /usr/local/bin/ggdb

    sudo ggdb ./myprog


4
lưu ý giết chết nhiệm vụ không khởi động lại quá trình. cần thiết để: sudo /System/Library/LaunchDaemons/com.apple.taskgated.plist tải launchctl
Ben

Các tác vụ đã khởi động lại ở trên - nhưng nó vẫn không hoạt động nếu không khởi động lại trên sierra, thật đáng buồn.
Neil McGill

16

Vấn đề là bạn không đăng nhập với tư cách người dùng root (mà bạn không muốn). Bạn cần tạo chứng chỉ cho gdb để được phép truy cập. Thực hiện theo hướng dẫn này và bạn sẽ tốt để đi ...

http://sourceware.org/gdb/wiki/Bu kiếmOnDarwin

Nếu vẫn thất bại, chỉ cần sử dụng: sudo gdb executableFileName


4
Các hướng dẫn ilnked ở đây làm việc tốt nhất. Chỉ cần chạy codesign -s gdb-cert $(which gdb)để ký gdbứng dụng.
cevaris

Chỉ cần xác nhận cho bất kỳ ai đang thử điều này trên OSX 10.12.5, bạn phải thực hiện theo các bước được nêu trong liên kết BuildingOnDarwin VÀ chạy gdb sau khi chuyển sang người dùng root.
AdjuncProfưởngFalcon

7

Liên kết này có từng bước rõ ràng và chi tiết nhất để làm cho lỗi này biến mất đối với tôi.

Trong trường hợp của tôi, tôi phải có khóa là khóa "Hệ thống" nếu không nó không hoạt động (điều mà không phải mọi url đều đề cập).

Ngoài ra giết chóc taskgatedlà một thay thế khả thi (và nhanh hơn) để phải khởi động lại.

Tôi cũng đã gỡ cài đặt MacPorts trước khi tôi bắt đầu quá trình này và gỡ cài đặt gdb hiện tại bằng cách sử dụng brew uninstall gdb.


Điều này làm việc cho tôi. +1 để tham khảo sử dụng brew.
trigoman

3

Tôi cần lệnh này để làm cho nó hoạt động trên El Capitan:

sudo security add-trust -d -r trustRoot -p basic -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/gdb-cert.cer


2

Trên MacOSX lldb cần phải được ký mã. Các bản dựng Gỡ lỗi và Phát hành được đặt thành ký mã bằng chứng chỉ ký mã có tên lldb_codesign.

If you don't have one yet you will need to:
- Launch /Applications/Utilities/Keychain Access.app

- In Keychain Access select the "login" keychain in the "Keychains"
  list in the upper left hand corner of the window.

- Select the following menu item:

    Keychain Access->Certificate Assistant->Create a Certificate...

- Set the following settings

    Name = lldb_codesign
    Identity Type = Self Signed Root
    Certificate Type = Code Signing

- Click Continue
- Click Continue
- Click Done
- Click on the "My Certificates"
- Double click on your new lldb_codesign certificate
- Turn down the "Trust" disclosure triangle

    Change:
        When using this certificate: Always Trust

- Enter your login password to confirm and make it trusted

The next steps are necessary on SnowLeopard, but are probably because of a bug
how Keychain Access makes certificates.

- Option-drag the new lldb_codesign certificate from the login keychain to
  the System keychain in the Keychains pane of the main Keychain Access window
  to make a copy of this certificate in the System keychain.  You'll have to
  authorize a few more times, set it to be "Always trusted" when asked.
- Switch to the System keychain, and drag the copy of lldb_codesign you just
  made there onto the desktop.
- Switch to Terminal, and run the following:

sudo security add-trust -d -r trustRoot -p basic -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/lldb_codesign.cer

- Right click on the "lldb_codesign" certificate in the "System" keychain (NOT
  "login", but the one in "System"), and select "Delete" to delete it from
  the "System" keychain.
- Reboot
- Clean and rebuild lldb and you should be able to debug.

That should do it.

[Lưu ý: - lldb được sử dụng trong mac dưới dạng gdb.]


2

Đây là một hướng dẫn thực sự hữu ích giúp giải quyết vấn đề của tôi (OSX 10.13.6).

  1. Mở truy cập Keychain
  2. Trong menu, mở Keychain Access> Trợ lý chứng chỉ> Tạo chứng chỉ
  3. Đặt tên cho nó (ví dụ: gdbc)
    • Loại danh tính: Root tự ký
    • Loại chứng chỉ: Ký mã
    • Kiểm tra: hãy để tôi ghi đè mặc định
  4. Tiếp tục cho đến khi nó nhắc bạn: "chỉ định vị trí cho ..."
  5. Đặt vị trí Keychain thành Hệ thống
  6. Tạo chứng chỉ và trợ lý thân thiết.
  7. Tìm chứng chỉ trong móc khóa hệ thống, nhấp chuột phải vào nó> nhận thông tin (hoặc chỉ cần nhấp đúp vào nó)
  8. Mở rộng lòng tin, đặt ký mã để luôn tin tưởng
  9. Khởi động lại nhiệm vụ trong thiết bị đầu cuối: killall taskgated
  10. Chạy codesign -fs gdbc /usr/local/bin/gdbtrong terminal: cái này hỏi mật khẩu root

1

Các hướng dẫn này hoạt động cho OSX High Sierra và tránh chạy gdb với quyền root (yuck!). Gần đây tôi đã cập nhật từ OSX 10.13.2 lên 10.3.3. Tôi nghĩ rằng đây là khi gdb 8.0.1 (đã cài đặt w / homebrew) bắt đầu thất bại đối với tôi.

Tôi gặp khó khăn với hướng dẫn của người khác. Sau những chỉ dẫn khác nhau, mọi thứ là một mớ hỗn độn. Vì vậy, tôi bắt đầu một tươi. Tôi ít nhiều làm theo các hướng dẫn này .

Dọn dẹp mớ hỗn độn:

  1. brew uninstall --force gdb # This deletes _all_ versions of gdb on the machine
  2. Trong Applications-> Utilities-> Keychain Access, tôi đã xóa tất cả các chứng chỉ và khóa gdb trước đó (hãy chắc chắn bạn biết bạn đang làm gì ở đây!). Không rõ điều này có cần thiết hay không, nhưng vì tôi đã cố gắng tạo ra các chứng chỉ và khóa đó bằng các hướng dẫn khác nên tôi đã loại bỏ chúng bằng mọi cách. Tôi đã có khóa và chứng chỉ trong cả đăng nhập và hệ thống.

Bây giờ cài đặt lại gdb.

  1. brew install gdb
  2. Trong Keychain Access, đi đến menu Keychain Access-> Certificate Assistant->Create a Certificate
  3. Kiểm tra "Để tôi ghi đè mặc định" và đặt
Name : gdb-cert
Identity Type: Self Signed Root
Certificate Type : Code Signing

[X] Let me override defaults
  1. Trên trang thông tin chứng chỉ 1:
Serial Number : 1
Validity Period (days): 3650
  1. Trên trang Thông tin Chứng chỉ thứ 2, tôi để trống tất cả các trường trừ những trường đã được điền.

  2. Trên trang Thông tin cặp khóa, tôi để mặc định

Key Size : 2048
Algorithm : RSA
  1. Trên trang Tiện ích mở rộng sử dụng chính, tôi đã kiểm tra mặc định.
[X] Include Key Usage Extension
[X] This extension is critical
Capabilities:
[X] Signature
  1. Trên trang Tiện ích mở rộng sử dụng khóa mở rộng, tôi đã kiểm tra mặc định.
[X] Include Extended Key Usage Extension
[X] This extension is critical
Capabilities:
[X] Code Signing
  1. Trên trang mở rộng ràng buộc cơ bản, không có gì được kiểm tra (mặc định).

  2. Trên trang Tiện ích mở rộng tên thay thế chủ đề, tôi để lại mặc định đã chọn và không thêm bất cứ thứ gì khác.

[X] Include Subject Alternate Name Extension
  1. Bật Chỉ định vị trí cho trang chứng chỉ, tôi đặt
Keychain: System
  1. Tôi bấm vào Tạo và được nhắc nhập mật khẩu của tôi.

  2. Quay trở lại Keychain Accessứng dụng, tôi đã Systemnhấp gdb-certvà nhấp chuột phải vào và bên dưới menu thả xuống Trust, tôi đã thay đổi tất cả các trường thành Always Trust.

  3. Máy tính khởi động lại.

  4. Tại Terminal, tôi chạy codesign -s gdb-cert /usr/local/bin/gdb. Tôi đã nhập mật khẩu của mình khi được nhắc.

  5. Tại nhà ga, tôi chạy echo "set startup-with-shell off" >> ~/.gdbinit

  6. Tôi đã chạy gdb myprogramvà sau đó starttrong bảng điều khiển gdb. Ở đây, tôi tin rằng, nó đã nhắc tôi nhập mật khẩu. Sau đó, tất cả các lần chạy tiếp theo, nó không nhắc mật khẩu của tôi.


Đáng buồn thay, tôi đã làm cả câu trả lời được bình chọn hàng đầu và câu trả lời của bạn, và vẫn thấy cùng một thông báo lỗi. Tôi có macOS Catalina Phiên bản 10.15.4 và gdb 9.1.
Jay Sullivan

@JaySullivan +1. Tôi cũng có vấn đề tương tự.
irsis

1

Đây là một cách tiếp cận kỳ lạ nhưng nó hiệu quả với tôi (MacOs HighSierra 10.13.3). Cài đặt CLion. Nó đi kèm với gdb. Sau khi chạy gdb bằng Terminal. Sao chép chương trình gdb vào usr / local / bin / của bạn. Không có vấn đề về đăng nhập, sudo, v.v.


1

Làm theo các hướng dẫn ở đây, Codeign gdb trên macOS dường như giải quyết vấn đề này, đối với tôi, trên macOS High Sierra (10.13.3).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.