首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在OSX上获得一个“共同设计”的gdb?

如何在OSX上获得一个“共同设计”的gdb?
EN

Stack Overflow用户
提问于 2012-12-17 20:03:02
回答 6查看 41K关注 0票数 45

因为我需要一个支持Python的gdb,所以我通过

代码语言:javascript
复制
brew tap homebrew/dupes
brew install gdb

我想在Eclipse CDT中使用这个gdb,我在调试设置中输入了二进制文件的路径。但是,启动用于调试的程序失败,并显示以下消息:

代码语言:javascript
复制
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 39847: (os/kern) failure (0x5).\n (please check gdb is codesigned - see taskgated(8))
Unable to find Mach task port for process-id 39847: (os/kern) failure (0x5).\n (please check gdb is codesigned - see taskgated(8))

在这种情况下,“共同设计”是什么意思?我如何让这个gdb运行起来?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-12-17 20:29:29

看起来您需要对可执行文件进行签名。有关详细信息,请参阅这些链接。如果您不打算重新分发该版本的gdb,那么您应该能够逃脱自我签名的惩罚。

https://developer.apple.com/library/mac/#documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html

https://developer.apple.com/library/mac/#documentation/Darwin/Reference/Manpages/man1/codesign.1.html

或者,您可以在系统上禁用代码签名,尽管这会带来安全风险。为此,请尝试在终端中运行sudo spctl --master-disable

票数 4
EN

Stack Overflow用户

发布于 2015-09-03 23:39:36

检查证书的可信性,必须信任它才能进行代码签名(在yosemite上,这是密钥链访问中证书视图的信任部分中的倒数第三个)。

起初,证书对于密钥链的协同设计并不为人所知,因为缺少扩展目的"Code Signing“,如果你查看密钥链并双击证书,你可以找到这个:

我解决了这个问题:

然后,在将证书从密钥链拖放到我的桌面后,我将证书添加到受信任的签名证书中,这将创建~/ desktop /gdb-cert.cer:

代码语言:javascript
复制
$ sudo security add-trusted-cert -d -r trustRoot -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/gdb-cert.cer

这有点棘手,因为我被一些互联网帖子误导了,没有看手册页。有些人说你应该使用add-trust (https://llvm.org/svn/llvm-project/lldb/trunk/docs/code-signing.txt)。最糟糕的是,命令成功了,但没有做它“应该”做的事情(好吧,这是一个错误的命令,但它应该告诉我它是错误的)。

之后,我在可信证书中找到了新的证书,如下所示:

代码语言:javascript
复制
$ security find-identity -p codesigning

Policy: Code Signing
  Matching identities
      1) E7419032D4..... "Mac Developer: FirstName LastName (K2Q869SWUE)"    (CSSMERR_TP_CERT_EXPIRED)
      2) ACD43B6... "gdb-cert"
  2 identities found

  Valid identities only
      1) ACD43... "gdb-cert"
  1 valid identities found

在我的例子中,苹果证书已经过期了,但是我用来给gdb签名的证书并没有过期(好吧,我自己创建的)。还要注意,对于“安全添加信任证书”(-p codeSign)和“安全查找标识”命令(-p代码设计),策略的名称是不同的。然后我继续签署gdb,我也总是得到:

代码语言:javascript
复制
$ codesign --sign gdb-cert.cer --keychain ~/Library/Keychains/login.keychain `which gdb`
  gdb-cert.cer: no identity found

因为我的印象是,我必须将证书文件的文件名提供给--sign选项,但实际上这是我应该提供的证书的CN,并且应该在信任存储区中。双击密钥链中的证书,您可以在此处找到CN:

或者在上面的"security find-identity -p codesigning“的输出中。然后我继续签名,我必须给它正确的钥匙链:

代码语言:javascript
复制
 codesign -s gdb-cert --keychain /Library/Keychains/System.keychain `which gdb` 

我必须输入root密码才能访问密钥链。

这给了我一个可以工作的gdb,它应该会给你一个签名的应用程序。

票数 5
EN

Stack Overflow用户

发布于 2015-11-20 07:16:16

如果使用gdb不是一个严格的要求,那么您也可以使用lldb作为替代。它已经在您的系统中,不需要代码签名:

代码语言:javascript
复制
$ lldb stddev_bugged
(lldb) target create "stddev_bugged"
Current executable set to 'stddev_bugged' (x86_64).
(lldb) b mean_and_var
Breakpoint 1: where = stddev_bugged`mean_and_var + 17 at stddev_bugged.c:17, address = 0x0000000100000b11
(lldb) r
Process 1621 launched: '/Users/richardschneeman/Documents/projects/21stCentury/02/example-00/stddev_bugged' (x86_64)
Process 1621 stopped
* thread #1: tid = 0xc777, 0x0000000100000b11 stddev_bugged`mean_and_var(data=0x00007fff5fbff590) + 17 at stddev_bugged.c:17, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
    frame #0: 0x0000000100000b11 stddev_bugged`mean_and_var(data=0x00007fff5fbff590) + 17 at stddev_bugged.c:17
   14   typedef struct meanvar {double mean, var;} meanvar;
   15
   16   meanvar mean_and_var(const double *data){
-> 17       long double avg = 0,
   18             avg2 = 0;
   19       long double ratio;
   20       size_t count= 0;
(lldb)

下面是将gdb转换为lldb命令的表格http://lldb.llvm.org/lldb-gdb.html

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13913818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档