gdb가“process-id에 대한 Mach 작업 포트를 찾을 수 없습니다”오류와 함께 실패


138

내 앱은 정상적으로 실행되지만 gdb는 다음 오류로 디버깅하지 못합니다.

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

OS X Lion을 사용하고 있습니다. GDB 버전은

$ 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".

이 게시물이 도움이 될 수 있습니다 생각 : stackoverflow.com/questions/10221448/...를 .
Codie CodeMonkey

답변:


64

Snow Leopard 및 이후 Mac OS 버전에서는 gdb실행 파일 을 공동 디자인하는 것만으로는 충분하지 않습니다 .

이 안내서를 따라 작동시켜야합니다. http://www.opensource.apple.com/source/lldb/lldb-69/docs/code-signing.txt

이 안내서에서는이를 수행하는 방법을 설명 lldb하지만 프로세스는 동일합니다 gdb.


12
MacPorts가있는 OSX 10.9.2에서는 이러한 지침이 작동하지 않았지만 다음과 같이 수행되었습니다. sourceware.org/gdb/wiki/BuildingOnDarwin
simpleuser

효과가있다! 하지만 sudo security add-trust라인이 무엇을하고 있는지 설명해 주 시겠습니까? .cer데스크탑 에서 파일을 삭제할 수 있습니까 ?
Sreejith Ramakrishnan

9
codesign -s gdb_codesign `which gdb` 이 안내서 이후 도움
synther

또는 sudo codesign -s gdb_codesign `which gdb-apple` macOS 시에라.
sdive

3
최신 OS의 경우 링크 작동
yuxuan

144

내가로 변경하면 작동합니다 sudo gdb executableFileName! :)


2
감사. gdb가 작동하려면이 더하기 코드 서명이 필요했습니다. gdb 루트 액세스 권한을 부여 했으므로 ( 여기에서 stackoverflow.com/questions/10476154/… 설명 참조 ) 매번 sudo를 입력 할 필요가 없었습니다. 편집 - 더 나은 방법 여기 찾았 stackoverflow.com/a/10441587/305149
Aneil Mallavarapu

14
루트로 실행 하시겠습니까? 진심 이세요? 최악의 "솔루션".
Equidamoid

7
@Equidamoid gdb루트 로 실행하는 것이 왜 그렇게 나쁠 까요? 디버거 일 뿐이므로 궁금했습니다.
이 사용자에게 도움이 필요합니다

루트로 실행하면 어떻게됩니까? 그것은 당신이 작성한 코드이며 결과를 이해하지 못합니다
CICE ICE

4
@COLDICE 일반적으로 에스컬레이션 된 권한으로 프로세스 (특히 루트로 에스컬레이션 됨)를 실행하고 싶지 않습니다. 일반적으로 시스템의 항목을 수정하거나 1024보다 낮은 포트를 열 때 액세스 할 필요가 없기 때문에 더 높은 포트는 비 시스템 / 비 루트 사용자가 사용). 자신의 코드를 "신뢰"한다고해서 rm -rf /컴퓨터가 정상적으로 시작하고 작동하기 위해 의존하는 일부 구성 / 이진을 덮어 쓰는 실수 나 유사 하지 않은 것을 의미하지는 않습니다 .
shaunhusain 2019

32

인증서를 작성하고 gdb에 서명해야합니다.

  • "키 체인 액세스"응용 프로그램 열기 (/ 응용 프로그램 / 유틸리티 / Keychain Access.app)
  • 메뉴 열기 / 키 체인 접근 / 인증서 보조 / 인증서 생성 ...
  • 이름 (예에서 gdb-cert)을 선택하고 "Identity Type"을 "Self Signed Root"로 설정하고 "Certificate Type"을 "Code Signing"으로 설정 한 다음 "Let me override defaults"를 선택하십시오. "계속"을 클릭하십시오. 사전 정의 된 365 일 기간을 3650 일로 연장 할 수 있습니다.
  • "인증서 위치 지정"화면이 나타날 때까지 "계속"을 여러 번 클릭 한 다음 "키 체인을 시스템"으로 설정하십시오.
  • 인증서를 "시스템"키 체인에 저장할 수 없으면 "로그인"키 체인에 인증서를 작성한 다음 내보내십시오. 그런 다음이를 "시스템"키 체인으로 가져올 수 있습니다.
  • 키 체인에서 "시스템"을 선택하면 새 인증서를 찾을 수 있습니다. 인증서의 상황에 맞는 메뉴를 사용하여“정보 입수”를 선택하고“신뢰”항목을 연 다음“코드 서명”을“항상 신뢰”로 설정하십시오.
  • 현재 실행중인 "taskgated"프로세스를 종료하여 인증서를 사용하고 "taskgated"서비스를 다시 시작하려면 "Keychain Access"응용 프로그램을 종료해야합니다. 또는 컴퓨터를 다시 시작할 수 있습니다.
  • 마지막으로 gdb에 서명 할 수 있습니다 :

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

    sudo ggdb ./myprog


4
note killing taskgated는 프로세스를 다시 시작하지 않았습니다. 필요 : sudo launchctl load /System/Library/LaunchDaemons/com.apple.taskgated.plist
Ben

위의 작업은 다시 시작되었지만 gerra에서 재부팅하지 않으면 슬프게도 여전히 작동하지 않았습니다.
Neil McGill

16

문제는 원하지 않는 루트 사용자로 로그인하지 않았다는 것입니다. 액세스 할 수 있도록 gdb에 대한 인증서를 작성해야합니다. 이 튜토리얼을 따라 가면 좋을 것입니다 ...

http://sourceware.org/gdb/wiki/BuildingOnDarwin

다른 모든 방법이 실패하면 다음을 사용하십시오. sudo gdb executableFileName


4
이 튜토리얼은 가장 효과적이었습니다. 앱에 codesign -s gdb-cert $(which gdb)서명 하기 위해 실행해야했습니다 gdb.
cevaris

OSX 10.12.5에서이 작업을 시도하는 사람을 확인하려면 BuildingOnDarwin 링크에 설명 된 단계를 따르고 루트 사용자로 전환 한 후 gdb를 실행해야합니다.
AdjunctProfessorFalcon

7

이 링크 에는이 오류가 사라지게하는 가장 명확하고 자세한 단계별 설명이 나와 있습니다.

내 경우에는 "시스템"키로 키를 가져야했습니다. 그렇지 않으면 작동하지 않습니다 (모든 URL이 언급하지는 않음).

또한 taskgated킬 ( killing) 은 다시 시작해야하는 실행 가능한 대안입니다.

또한 MacPorts를을 제거 나는이 과정을 시작하여 현재 GDB를 제거하기 전에 brew uninstall gdb.


이것은 나를 위해 일했습니다. 사용 참조 +1 brew.
trigoman

3

El Capitan에서 작동하려면이 명령이 필요했습니다.

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


2

MacOSX에서 lldb는 코드 서명되어야합니다. 디버그 및 릴리스 빌드는 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.

[참고 :-lldb는 mac에서 gdb로 사용됩니다.]


2

여기 내 문제를 해결 한 정말 유용한 안내서 가 있습니다 (OSX 10.13.6).

  1. 열린 키 체인 접근
  2. 메뉴에서 키 체인 접근> 인증 지원> 인증서 작성을여십시오.
  3. 이름을 입력하십시오 (예 : gdbc)
    • 신원 유형 : 자체 서명 된 루트
    • 인증 유형 : 코드 서명
    • 확인 : 기본값을 재정의하겠습니다
  4. "위치를 지정하십시오 ..."라는 메시지가 표시 될 때까지 계속 진행하십시오.
  5. 키 체인 위치를 시스템으로 설정
  6. 인증서를 작성하고 보조자를 닫으십시오.
  7. 시스템 키 체인에서 인증서를 찾아 마우스 오른쪽 단추로 클릭하고 정보를 얻거나 두 번 클릭하십시오.
  8. 신뢰를 확장하고 코드 서명을 항상 신뢰하도록 설정
  9. 터미널에서 taskgated를 다시 시작하십시오. killall taskgated
  10. codesign -fs gdbc /usr/local/bin/gdb터미널에서 실행 : 루트 암호를 묻습니다.

1

이 지침은 OSX High Sierra에서 작동하며 gdb를 루트 (yuck!)로 실행하지 마십시오. 최근에 OSX 10.13.2에서 10.3.3으로 업데이트되었습니다. gdb 8.0.1 (homebrew로 설치)이 실패하기 시작한 때라고 생각합니다.

다른 사람들의 지시에 어려움이있었습니다. 다른 지시를받은 후에 모든 것이 혼란 스러웠습니다. 그래서 나는 신선한 시작했다. 나는이 지시를 어느 정도 따랐다 .

혼란을 청소하십시오 :

  1. brew uninstall --force gdb # This deletes _all_ versions of gdb on the machine
  2. 에서 Applications-> Utilities-> Keychain Access, 나는 이전의 모든 GDB 인증서와 키를 삭제 (당신이 당신이 무슨 일을하는지 알 수!). 이것이 필요한지 확실하지 않지만 다른 지침을 사용하여 해당 인증서와 키를 만들려고 노력했기 때문에 어쨌든 제거했습니다. 로그인과 시스템 모두에 키와 인증서가 있습니다.

이제 gdb를 다시 설치하십시오.

  1. brew install gdb
  2. Keychain Access에서 메뉴 Keychain Access-> Certificate Assistant->로 이동하십시오.Create a Certificate
  3. "기본값 무시"를 체크하고 설정하십시오
Name : gdb-cert
Identity Type: Self Signed Root
Certificate Type : Code Signing

[X] Let me override defaults
  1. 첫 번째 인증서 정보 페이지에서 :
Serial Number : 1
Validity Period (days): 3650
  1. 두 번째 인증서 정보 페이지에서 이미 채워진 필드를 제외한 모든 필드를 비워 두었습니다.

  2. 키 페어 정보 페이지에서 기본값을 그대로 두었습니다.

Key Size : 2048
Algorithm : RSA
  1. Key Usage Extension 페이지에서 기본값을 선택된 상태로 두었습니다.
[X] Include Key Usage Extension
[X] This extension is critical
Capabilities:
[X] Signature
  1. 확장 키 사용 확장명 페이지에서 기본값을 선택된 상태로 두었습니다.
[X] Include Extended Key Usage Extension
[X] This extension is critical
Capabilities:
[X] Code Signing
  1. 기본 구속 조건 확장 페이지에서 아무것도 점검되지 않았습니다 (기본값).

  2. 제목 대체 이름 확장명 페이지에서 기본값을 선택된 상태로두고 다른 것을 추가하지 않았습니다.

[X] Include Subject Alternate Name Extension
  1. 인증서 페이지의 위치 지정에서
Keychain: System
  1. 생성을 클릭하고 비밀번호를 묻는 메시지가 표시되었습니다.

  2. Keychain Access앱으로 돌아가서 System마우스 오른쪽 버튼을 클릭 gdb-cert하고 드롭 다운 메뉴 Trust에서 모든 필드를로 변경했습니다 Always Trust.

  3. 컴퓨터를 재부팅했습니다.

  4. 터미널에서 나는 뛰었다 codesign -s gdb-cert /usr/local/bin/gdb. 프롬프트가 표시되면 비밀번호를 입력했습니다.

  5. 터미널에서, 나는 달렸다 echo "set startup-with-shell off" >> ~/.gdbinit

  6. 나는 실행 gdb myprogram다음과 startgdb를 콘솔 내에서. 여기에 비밀번호를 입력하라는 메시지가 표시됩니다. 그 후, 모든 후속 실행에서 암호를 묻지 않았습니다.


슬프게도, 나는 가장 인기있는 답변과 귀하의 답변을 모두 수행했지만 여전히 동일한 오류 메시지가 표시됩니다. macOS Catalina 버전 10.15.4 및 gdb 9.1이 있습니다.
Jay Sullivan

@JaySullivan +1. 나도 같은 문제가 있습니다.
irsis

1

이것은 이상한 접근법이지만 나를 위해 일했습니다 (MacOs HighSierra 10.13.3). CLion을 설치하십시오. gdb와 함께 제공됩니다. 터미널을 사용하여 gdb를 실행하십시오. gdb 프로그램을 usr / local / bin /에 복사하십시오. 로그인, sudo 등의 문제가 없습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.