"कृपया जाँच करें कि gdb कोड-कोडित है - टास्कगेटेड (8) देखें" - होमब्रे कोड के साथ gbb को कैसे प्राप्त किया जाए?


107

मैं ओएसएक्स 10.8.4 के अधीन हूं और होमब्रेव के साथ जीडीबी 7.5.1 स्थापित किया है (प्रेरणा से नई सुविधाओं के साथ एक नया जीडीबी प्राप्त होता है जैसे कि --with-python आदि ...)

जब मैं एक सी + + ग्रहण परियोजना के भीतर डिबग चलाता हूं तो लंबी कहानी छोटी होती है:

Error in final launch sequence
Failed to execute MI command:
-exec-run
Error message from debugger back end:
Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))
Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))

मैंने कोड हस्ताक्षर के लिए विभिन्न सुझावों का पालन किया है

तो मैंने किया:

  1. प्रमाण पत्र सेट करें
  2. जीडीबी साइन करें -> कोडसाइन -s जीडीबी-सर्टिफिकेट / यूएसआर / लोकल / बिन / जीडीबी

जब मैं एक्लिप्स में डिबगिंग को फिर से चलाता हूं तो मुझे ऊपर के रूप में एक ही त्रुटि मिलती है "(कृपया चेक करें जीडीबी कोडित है - टास्कगेट देखें (8))"।

अगर मैं पुराने gdb (ग्रहण की gdb प्राथमिकताओं में) / usr / libexec / gdb / gdb-i386-apple-darwin पर वापस gdb सेट करता हूं, तो डिबगिंग अपेक्षित रूप से चलती है।

कोई समाधान / संकेत वहाँ?

धन्यवाद

पेले


क्या यह "सुरक्षा सुविधा" नहीं है - दूसरे शब्दों में, आपके सिस्टम को केवल उस सॉफ़्टवेयर को स्वीकार करने के लिए कॉन्फ़िगर किया गया है जिसे आधिकारिक रूप से हस्ताक्षरित किया गया है? यदि हां, तो उम्मीद है कि उस सुविधा को बंद करने का एक तरीका है ...
मैट पीटरसन

आपकी प्रतिक्रिया के लिए ठीक है धन्यवाद - मैं आपकी सुरक्षा सुविधा बिंदु को समझता हूं लेकिन मेरी समस्या यह है कि हस्ताक्षर कैसे करें ... एक समान पोस्ट stackoverflow.com/questions/12050257/gdb-fails-on-mountain-lion है जो ' t इसे अभी तक मेरे लिए हल करें
pellekrogholt

जवाबों:


136

यह त्रुटि तब होती है क्योंकि OSX एक pid अभिगम नीति को लागू करता है जिसे अन्य प्रक्रियाओं pids तक पहुँचने के लिए बायनेरिज़ के लिए एक डिजिटल हस्ताक्षर की आवश्यकता होती है। अन्य प्रक्रियाओं में gdb एक्सेस को सक्षम करने के लिए, हमें पहले बाइनरी पर हस्ताक्षर करना चाहिए। यह हस्ताक्षर एक विशेष प्रमाणपत्र पर निर्भर करता है, जिसे उपयोगकर्ता को सिस्टम के साथ बनाना और पंजीकृत करना होगा।

कोड हस्ताक्षर प्रमाणपत्र बनाने के लिए, किचेन एक्सेस एप्लिकेशन खोलें। मेनू चुनें चाबी का गुच्छा पहुँच -> प्रमाणपत्र सहायक -> एक प्रमाण पत्र बनाएँ ...

प्रमाण पत्र के लिए एक नाम चुनें (उदाहरण के लिए, जीडीबी-सर्टिफिकेट), पहचान के प्रकार को स्वयं हस्ताक्षरित रूट पर सेट करें, प्रमाणपत्र प्रकार को कोड हस्ताक्षर करने के लिए सेट करें और मुझे डिफॉल्ट को ओवरराइड करने दें का चयन करें। जारी रखने के लिए कई बार क्लिक करें जब तक आपको प्रमाणपत्र स्क्रीन के लिए कोई स्थान निर्दिष्ट न हो जाए, तब किचेन को सिस्टम पर सेट करें।

प्रमाणपत्र पर डबल क्लिक करें, ट्रस्ट अनुभाग खोलें, और कोड सिग्नल को हमेशा ट्रस्ट पर सेट करें। किचेन एक्सेस एप्लिकेशन से बाहर निकलें।

कार्यशील सेवा को पुनरारंभ करें, और बाइनरी पर हस्ताक्षर करें।

$ sudo killall taskgated
$ codesign -fs gdb-cert "$(which gdb)"

source http://andresabino.com/2015/04/14/codesign-gdb-on-mac-os-x-yosemite-10-10-2/

MacOS पर 10.12 (सिएरा) और बाद में, आपको भी होना चाहिए

Gdb 7.12.1 या बाद के संस्करण का उपयोग करें साथ ही प्रोग्राम को डीबग करने के लिए शेल का उपयोग करने से gdb को रोकें। आप इसके लिए gdb के अंदर निम्न कमांड का उपयोग कर सकते हैं:

set startup-with-shell off

आप अपने घर निर्देशिका में .gdbinit नामक फ़ाइल में यह अंतिम कमांड भी डाल सकते हैं, जिस समय यह आपके द्वारा gdb शुरू करने पर हर बार स्वचालित रूप से लागू किया जाएगा

echo "set startup-with-shell off" >> ~/.gdbinit

स्रोत: https://sourceware.org/gdb/wiki/BuildingOnDarwin


6
एक जादू की तरह काम करता है। धन्यवाद।
pceccon

14
जैसा कि ओपी ने बताया, यह उसके लिए (और मेरे लिए भी) चाल नहीं चली।
पीवीआईटी

6
ऐसा लगता है कि यह macOS Sierraस्व हस्ताक्षरित प्रमाण पत्र के साथ काम नहीं करता है ।
लोरेटोपारसी

sudo killall taskgatedमेरी समस्या को हल करने की कुंजी है
कार्तिकेयन वैथीलिंगम

मैंने ठीक चरणों का पालन किया, और इसने मेरे लिए macOS Sierra पर खूबसूरती से काम किया।
jdg

29

मैंने इस तरह कोड किए बिना OSX 10.9 पर gdb काम किया ( यहाँ वर्णित है ):

  1. Macports के साथ gdb स्थापित करें। (आप इसे छोड़ सकते हैं)

  2. sudo nano /System/Library/LaunchDaemons/com.apple.taskgated.plist

    से विकल्प स्ट्रिंग को बदलने -sके लिए -spलाइन 22, col 27 पर।

  3. कम्प्युटर को रीबूट करो।

  4. Gdb का प्रयोग करें। यदि आपने इसे मैक पोर्ट के साथ इंस्टॉल किया है तो आपको ggdbकमांड का उपयोग करना होगा । या आपकी कॉन्फ़िग फ़ाइल में एक उपनाम बनाया है:

alias gdb='ggdb'

और 'gdb' कमांड का उपयोग करें।


मैं थोड़ी देर के लिए इस मुद्दे पर चल रहा था और अन्य लोगों को कैसे पता चला था। इसने एकदम जादू की तरह काम किया।
बिल डेरास

@BillDeRose, मेरे लिए वही।
klm123

@nimrodm, आपका मतलब "सुडो जीडीबी" है? यह macports के साथ "ggdb" होना चाहिए
klm123

1
ओह। मैं के gdbरूप में चलाने के लिए नहीं करना चाहती sudo। यह एक अनावश्यक सुरक्षा जोखिम की तरह लगता है।
शरद ऋतु

2
कंप्यूटर को पुनरारंभ करने के लिए नहीं जा रहा है। कुछ को पुनरारंभ करने के लिए एक आदेश होना चाहिए!
माइकल

27

मैंने अपग्रेड किया gdb 8.3और काम करने में सक्षम नहीं था। इससे मुझे मदद मिली:

codesign --entitlements gdb.xml -fs gdb-cert /usr/local/bin/gdb

सामग्री कहाँ gdb.xmlहै:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.cs.allow-jit</key>
    <true/>
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    <key>com.apple.security.cs.allow-dyld-environment-variables</key>
    <true/>
    <key>com.apple.security.cs.disable-library-validation</key>
    <true/>
    <key>com.apple.security.cs.disable-executable-page-protection</key>
    <true/>
    <key>com.apple.security.cs.debugger</key>
    <true/>
    <key>com.apple.security.get-task-allow</key>
    <true/>
</dict>
</plist>

मुझे यह समाधान यहां मिला: https://timnash.co.uk/getting-gdb-to-semi-reliably-work-on-mojave-macos/

नोट: अधिकार के बिना मैं gdbकेवल साथ चलने में सक्षम था sudo


2
यदि आप प्राप्त करते हैं तो आप क्या करते हैंerror: The specified item could not be found in the keychain.
श्रीधर सरनोबत

@SridharSarnobat उपयोग पाइपलाइन इस उत्तर के पहले stackoverflow.com/a/32727069/339146
Panayotis

@Maximser का उत्तर आज़माने के बाद विफल। फिर यह मेरे लिए काम करता है। macOS 10.15.4, gdb 9.2 काढ़ा के माध्यम से स्थापित किया गया।
weaming

@ श्रीधरनारोबत: आपको पहले सर्टिफ़िकेट बनाना है stackoverflow.com/questions/35020236/…
Akansha

26

मैंने GDB के साथ एक ही मुद्दे का अनुभव किया। मैं Mac OS X 10.8.5उर्फ माउंटेन लॉयन के अधीन चल रहा हूं । मैं GDB संस्करण का उपयोग कर रहा हूं 7.7.1

मैंने निम्नलिखित आदेश के साथ अपना परीक्षण कार्यक्रम संकलित किया:

g++ -o gdb-sample.out -g gdb-sample.cpp    

यदि मैंने कमांड दर्ज किया है gdb sample.out, तो मुझे एक ही गुप्त त्रुटि संदेश मिलता है:

"Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5). (please check gdb is codesigned - see taskgated(8))"

यह त्रुटि संदेश हालांकि एक लाल हेरिंग है।

मैंने पाया कि मेरे लिए काम करने वाला समाधान सुपरबस्टर एसक्ट का उपयोग करके बस जीडीबी को लागू करना था:

sudo gdb sample.out. 

यह मेरे लिए ठीक काम करता है।

और उस बिंदु से मैं sudo का उपयोग किए बिना GDB example.out चला सकता था।

आशा है कि यह मदद करता है और दूसरों के लिए काम करता है। RSVP अगर यह नहीं है।


1
निश्चित नहीं है कि यह मतदान क्यों हुआ था। मैंने कमांड को रूट के रूप में चलाया (सूडो के साथ) और इसने काम किया।
iProgram

6

इसमें से किसी ने भी मेरे लिए काम नहीं किया और मुझे लंबे समय तक साथ रहना पड़ा। यहाँ चरणों की एक पूरी सूची है जो मैंने इसे काम करने के लिए किया है।

  1. जीडीबी पर हस्ताक्षर करने के लिए एक प्रमाण पत्र बनाएं।

दुर्भाग्य से, सिस्टम सर्टिफिकेट मुझे दिया गया Unknown Error = -2,147,414,007जो बहुत मददगार है, इसलिए मुझे वर्कअराउंड के साथ जाना पड़ा। KeyChain Assistant -> Create certificate ->

उठाओ login, gdb-cert,Code Signing

सिस्टम किचेन में प्रमाणपत्र को कॉपी / स्थानांतरित करें (पासवर्ड दर्ज करें)

  1. प्रमाणपत्र का चयन करें ( gdb-cert) क्लिक करें Get info->Trust Always
  2. अक्षम startup-with-shell

कंसोल में दर्ज करें: set startup-with-shell off

कॉन्फ़िगरेशन याद रखें: echo "set startup-with-shell off" >> ~/. gdbinit

  1. रूट उपयोगकर्ता को सक्षम करें

पर जाएं System Preferences> - Users & Groups-> Unlock it-> Login Options-> Network Account Server-> Join-> Unlock it-> Edit(मेनू) ->Enable Root User

  1. sudo killall taskgated
  2. अंत में जीडीबी पर हस्ताक्षर करें

codesign -fs gdb-cert "$(which gdb)"

  1. रूट उपयोगकर्ता अक्षम करें (चरण 4)
  2. रिबूट अगर अभी भी काम नहीं करता है। (यदि और कुछ नहीं काम करता है, तो सबसे अधिक संभावना है कि यह पहले से ही काम करता है)

पुनश्च। मैं अंत में उपयोग lldbकरता हूं क्योंकि यह सिर्फ काम करता है ( ट्यूटोरियल )


5

सिएरा 10.12.6 (और ऊपर) और होमब्रेव का उपयोग करने वाले किसी भी व्यक्ति के /usr/local/bin/gdbलिए /usr/local/Cellar/gdb/8.0/bin/gdb(या जो भी संस्करण, जैसे 8.0.1) एक प्रतीकात्मक लिंक है ।

आपको लिंक और लक्ष्य दोनों को कोड करने की आवश्यकता है:

codesign -fs gdb-cert /usr/local/bin/gdb
codesign -fs gdb-cert "/usr/local/Cellar/gdb/8.0/bin/gdb"

या, यदि आपके पास greadlink(द्वारा स्थापित brew install coreutils):

codesign -fs gdb-cert $(which gdb)
codesign -fs gdb-cert $(greadlink -f $(which gdb))

1
क्या आपने हाई सिएरा पर यह कोशिश की? यह मेरे लिए O / S: 10.13.6
rustyMagnet

3

मुझे आश्चर्य है कि अगर यहां सबसे ज्यादा वोट दिए गए उत्तर में वैश्विक परिवर्तन के कुछ अनपेक्षित परिणाम हैं।

पुराने टाइगर सम्मेलन को सक्षम करने के बजाय, टास्कगेटेड हस्ताक्षरित कोड को चलाने की अनुमति देता है। तो यह बेहतर हो सकता है कि केवल जीडीबी के लिए एक हस्ताक्षरित प्रमाण पत्र प्राप्त करें, यहां दिए गए उत्तर के समान ।

इसके बाद मैं sudogdb का उपयोग करने में सक्षम था । अगर आपको gdb w / o sudo का उपयोग करने की आवश्यकता है, तो शायद यह लिंक हालांकि, अस्वीकरण में मदद करेगा , मैंने इसे अभी तक आज़माया नहीं है क्योंकि अब उपयोग करना 'के sudoलिए एक ठीक समाधान है।


3

यह संबंधित नहीं हो सकता है। आप gdb के बजाय macos पर lldb का उपयोग कर सकते हैं। Gdb को स्थापित करने के लिए आपको इस परेशानी की आवश्यकता नहीं है।

lldb ( http://lldb.llvm.org ) हाई सिएरा में पहले से ही डिफ़ॉल्ट रूप से स्थापित है


0

मैं इस जिस्ट का अनुसरण करने की सिफारिश कर सकता हूं: https://gist.github.com/gravitylow/fb595186ce6068537a6e9da6d8b5b96d#file-codesign_gdb-md

दूर करने के लिए ट्रिक के साथ: unknown error = -2,147,414,007यहां सर्टिफिकेट क्रिएशन के दौरान: https://apple.stackexchange.com/a/309123

टिप्पणियाँ:

homebrewपैकेज के रूप में स्थापित gdb के लिए पथ कुछ इस तरह होना चाहिए:/usr/local/Cellar/gdb/9.2/bin/gdb

और के csrutil enable --without debugबारे में एक संदेश का कारण होगाrequesting unsupported configuration तरह के : https://totalfinder.binaryage.com/system-integrity-protection

परीक्षा:

  sw_vers -productVersion
10.13.6

  gdb ./a.out
GNU gdb (GDB) 9.2
...
Thread 3 hit Breakpoint 1, main () at main.c:14
14          data_t d = {0};

-1

जीडीबी 8.3;

मेरी समस्या ऊपर के आदमी द्वारा हल की ही तरह है

codesign --entitlements gdb.xml -fs gdb-cert /usr/local/bin/gdb
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.