您当前的位置: 首页 >  macos

暂无认证

  • 0浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

GDB基础:MacOS上的GDB安装与设定

发布时间:2020-09-19 03:45:49 ,浏览量:0

这篇文章介绍一下MacOS下GDB的安装与设定方法。在MacOS上使用LLDB可能会更方便一些,但是对于习惯gdb的用于以及LLDB无法完成的地方,GDB还是有很多优势的。

目录
  • 环境说明
  • 安装与确认
  • 调试使用
  • 常见问题与对应
    • 添加证书
    • 添加证书(命令行方式)
    • r命令后卡住
    • 其他问题
  • 参考内容
环境说明
  • 本文使用的环境信息如下所示:
liumiaocn:gdb liumiao$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.15.6
BuildVersion:	19G73
liumiaocn:gdb liumiao$
  • gcc版本信息
liumiaocn:gdb liumiao$ gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 11.0.0 (clang-1100.0.33.16)
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
liumiaocn:gdb liumiao$
安装与确认

执行如下命令即可使用brew进行gdb的安装

执行命令:brew install gdb

  • 版本确认
liumiaocn:gdb liumiao$ gdb --version
GNU gdb (GDB) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
liumiaocn:gdb liumiao$
调试使用
liumiaocn:gdb liumiao$ gdb a.out
GNU gdb (GDB) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin19.5.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
.
Find the GDB manual and other documentation resources online at:
    .

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from a.out...
Reading symbols from /Users/liumiao/tt/gdb/a.out.dSYM/Contents/Resources/DWARF/a.out...
(gdb) b main
Breakpoint 1 at 0x100000c8c: file main.c, line 26.
(gdb) r
Starting program: /Users/liumiao/tt/gdb/a.out
[New Thread 0x2703 of process 8023]
[New Thread 0x1a03 of process 8023]
warning: unhandled dyld version (16)

Thread 2 hit Breakpoint 1, main () at main.c:26
26	    char input_length = 0;
(gdb)
常见问题与对应 添加证书
  • 现象: 提示Unable to find Mach task port for process-id信息,具体示例如下所示:
liumiaocn:gdb liumiao$ gcc -g main.c
liumiaocn:gdb liumiao$ 
liumiaocn:gdb liumiao$ gdb a.out
GNU gdb (GDB) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin19.5.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
.
Find the GDB manual and other documentation resources online at:
    .

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from a.out...
Reading symbols from /Users/liumiao/tt/gdb/a.out.dSYM/Contents/Resources/DWARF/a.out...
(gdb) b main
Breakpoint 1 at 0x100000cac: file main.c, line 24.
(gdb) b main.c:16
Breakpoint 2 at 0x100000c56: file main.c, line 16.
(gdb) r
Starting program: /Users/liumiao/tt/gdb/a.out 
Unable to find Mach task port for process-id 35236: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))
(gdb)
  • 对应方法 打开启动台>>其他>>钥匙串访问>>证书助理>>创建证书 在这里插入图片描述 在这里插入图片描述 设定证书相关内容 在这里插入图片描述 注意设定保存位置为System,其余均可保持为缺省即可 在这里插入图片描述 设定证书为Always Trust 在这里插入图片描述 然后在命令行中执行如下命令即可
liumiaocn:gdb liumiao$ sudo killall taskgated
Password:
liumiaocn:gdb liumiao$ codesign -fs gdb_codesign /usr/local/bin/gdb
liumiaocn:gdb liumiao$

注意第2条命令执行时需要输入相应的用户名和密码, 然后重启系统

添加证书(命令行方式)
liumiaocn:cert liumiao$ security find-certificate -c gdb_codesign
keychain: "/Users/liumiao/Library/Keychains/login.keychain-db"
version: 512
class: 0x80001000 
attributes:
    "alis"="gdb_codesign"
    "cenc"=0x00000003 
    "ctyp"=0x00000001 
    "hpky"=0x731206D5E9DBB54C0CC76412400C3B9A4D5BE4DC  "s\022\006\325\351\333\265L\014\307d\022@\014;\232M[\344\334"
    "issu"=0x30243115301306035504030C0C6764625F636F64657369676E310B300906035504061302434E  "0$1\0250\023\006\003U\004\003\014\014gdb_codesign1\0130\011\006\003U\004\006\023\002CN"
    "labl"="gdb_codesign"
    "skid"="snbr"=0x01 
    "subj"=0x30243115301306035504030C0C6764625F636F64657369676E310B300906035504061302434E  "0$1\0250\023\006\003U\004\003\014\014gdb_codesign1\0130\011\006\003U\004\006\023\002CN"
liumiaocn:cert liumiao$ 
liumiaocn:cert liumiao$ 
liumiaocn:cert liumiao$ security find-certificate -p -c  gdb_codesign | openssl x509 -checkend 0
Certificate will not expire
liumiaocn:cert liumiao$ 
liumiaocn:cert liumiao$ security find-certificate -p -c  gdb_codesign | openssl x509 -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN=gdb_codesign, C=CN
        Validity
            Not Before: Sep 17 00:34:43 2020 GMT
            Not After : Sep 17 00:34:43 2021 GMT
        Subject: CN=gdb_codesign, C=CN
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:d6:b7:8b:e1:e9:57:0a:91:71:9b:65:84:c4:91:
                    11:c7:27:f4:08:77:8b:17:f9:6f:4c:32:a3:bf:5b:
                    3a:a1:10:80:e8:a8:6b:1a:cd:7f:d1:5f:cb:6d:df:
                    53:59:a8:07:6e:7c:0a:e4:1d:ba:53:e1:bd:f8:0e:
                    27:05:50:22:84:c7:3d:08:96:6f:03:d0:1e:d0:01:
                    ef:63:f4:5e:1e:1e:a2:38:51:c9:9d:36:3f:3d:90:
                    37:a3:a2:db:17:7b:c1:93:1b:10:2b:fa:2b:25:b5:
                    64:71:31:b6:aa:72:79:cc:cb:e2:b5:5a:e1:2f:f9:
                    09:ea:4f:c1:63:84:26:38:9f:1e:47:cd:9e:fb:fc:
                    44:f2:02:50:b9:c2:49:8a:2c:1e:75:b0:0a:19:50:
                    4a:34:17:f3:c4:cd:ec:b0:9c:cb:78:bb:1c:e7:e3:
                    61:f4:2e:13:c2:5e:3a:b2:0d:c6:d6:ee:44:54:79:
                    f4:7a:08:c5:f5:b7:b6:f7:88:b8:0b:72:8d:bf:c2:
                    6f:a8:15:72:c0:46:79:75:72:63:84:0c:03:2c:8d:
                    4c:b4:09:04:ad:be:8e:f7:78:f2:ea:b0:b2:7f:1f:
                    ac:d1:a1:15:91:6c:90:71:76:d0:9a:a8:f7:0d:bf:
                    24:36:fc:c0:26:7f:80:ee:63:44:3c:a4:47:2d:93:
                    80:0d
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage: critical
                E-mail Protection
    Signature Algorithm: sha256WithRSAEncryption
         ca:38:2b:43:52:3b:48:1a:66:ec:a9:dd:37:de:cf:12:d8:c1:
         e2:77:8a:fd:d7:5f:62:1c:1f:b9:16:3b:d5:d9:17:81:24:9d:
         a3:04:e3:9a:a7:40:98:5e:21:ba:94:4a:5d:2f:49:55:73:e9:
         b0:f3:cd:e5:a1:b4:78:55:59:74:b1:c0:f1:da:06:29:1a:50:
         48:d4:39:b0:2f:95:1c:41:10:38:ca:02:8e:f1:cb:37:2f:53:
         e8:cb:9f:29:9a:74:7f:06:92:22:f7:41:d5:1f:03:b9:46:3f:
         b4:22:bb:ef:33:85:79:ac:01:6a:db:12:65:ce:35:31:49:9f:
         47:5b:b7:c5:cd:17:aa:b7:a7:57:ed:49:51:9c:82:29:10:e4:
         fa:40:ce:d0:a2:e4:7e:10:92:0c:c7:f5:d8:2c:67:6f:c7:82:
         ac:d9:ff:aa:89:d1:72:0c:ba:5a:aa:0b:d9:14:35:13:51:89:
         90:7d:9e:5c:bb:1e:3c:65:05:58:fc:42:cf:62:9e:c9:33:e8:
         04:c5:78:f4:b5:c0:48:ec:84:d9:97:c4:8f:e0:0e:26:15:3b:
         24:6f:06:75:45:f4:3c:eb:22:bc:5e:b4:da:bb:56:99:c7:44:
         9d:e1:e5:19:98:14:c7:03:2b:67:ae:e8:d6:43:b7:33:85:9e:
         e0:5e:33:c2
liumiaocn:cert liumiao$ 
liumiaocn:cert liumiao$ security dump-trust-settings -d
Number of trusted certs = 5
Cert 0: kubernetes
   Number of trust settings : 10
   Trust Setting 0:
      Policy OID            : SSL
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 1:
      Policy OID            : SSL
      Allowed Error         : Host name mismatch
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 2:
      Policy OID            : SMIME
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 3:
      Policy OID            : SMIME
      Allowed Error         : S/MIME Email address mismatch
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 4:
      Policy OID            : EAP
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 5:
      Policy OID            : IPSec
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 6:
      Policy OID            : Code Signing
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 7:
      Policy OID            : Unknown OID length 9, value { 2A 86 48 86 F7 63 64 01 14  }
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 8:
      Policy OID            : Apple X509 Basic
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 9:
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
Cert 1: 税务电子证书一级根
   Number of trust settings : 10
   Trust Setting 0:
      Policy OID            : SSL
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 1:
      Policy OID            : SSL
      Allowed Error         : Host name mismatch
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 2:
      Policy OID            : SMIME
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 3:
      Policy OID            : SMIME
      Allowed Error         : S/MIME Email address mismatch
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 4:
      Policy OID            : EAP
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 5:
      Policy OID            : IPSec
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 6:
      Policy OID            : Code Signing
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 7:
      Policy OID            : Unknown OID length 9, value { 2A 86 48 86 F7 63 64 01 14  }
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 8:
      Policy OID            : Apple X509 Basic
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 9:
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
Cert 2: www.devops.com
   Number of trust settings : 9
   Trust Setting 0:
      Policy OID            : SSL
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustAsRoot
   Trust Setting 1:
      Policy OID            : SSL
      Allowed Error         : Host name mismatch
      Result Type           : kSecTrustSettingsResultTrustAsRoot
   Trust Setting 2:
      Policy OID            : SMIME
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustAsRoot
   Trust Setting 3:
      Policy OID            : SMIME
      Allowed Error         : S/MIME Email address mismatch
      Result Type           : kSecTrustSettingsResultTrustAsRoot
   Trust Setting 4:
      Policy OID            : EAP
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustAsRoot
   Trust Setting 5:
      Policy OID            : IPSec
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustAsRoot
   Trust Setting 6:
      Policy OID            : Code Signing
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustAsRoot
   Trust Setting 7:
      Policy OID            : Unknown OID length 9, value { 2A 86 48 86 F7 63 64 01 14  }
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustAsRoot
   Trust Setting 8:
      Policy OID            : Apple X509 Basic
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustAsRoot
Cert 3: kubernetes
   Number of trust settings : 10
   Trust Setting 0:
      Policy OID            : SSL
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 1:
      Policy OID            : SSL
      Allowed Error         : Host name mismatch
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 2:
      Policy OID            : SMIME
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 3:
      Policy OID            : SMIME
      Allowed Error         : S/MIME Email address mismatch
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 4:
      Policy OID            : EAP
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 5:
      Policy OID            : IPSec
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 6:
      Policy OID            : Code Signing
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 7:
      Policy OID            : Unknown OID length 9, value { 2A 86 48 86 F7 63 64 01 14  }
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 8:
      Policy OID            : Apple X509 Basic
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 9:
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
Cert 4: gdb_codesign
   Number of trust settings : 9
   Trust Setting 0:
      Policy OID            : SSL
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 1:
      Policy OID            : SSL
      Allowed Error         : Host name mismatch
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 2:
      Policy OID            : SMIME
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 3:
      Policy OID            : SMIME
      Allowed Error         : S/MIME Email address mismatch
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 4:
      Policy OID            : EAP
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 5:
      Policy OID            : IPSec
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 6:
      Policy OID            : Code Signing
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 7:
      Policy OID            : Unknown OID length 9, value { 2A 86 48 86 F7 63 64 01 14  }
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
   Trust Setting 8:
      Policy OID            : Apple X509 Basic
      Allowed Error         : CSSMERR_TP_CERT_EXPIRED
      Result Type           : kSecTrustSettingsResultTrustRoot
liumiaocn:cert liumiao$ 
liumiaocn:cert liumiao$ 
liumiaocn:cert liumiao$ vi gdb-entitlement.xml
liumiaocn:cert liumiao$ codesign --entitlements gdb-entitlement.xml -fs gdb_codesign $(which gdb)
/usr/local/bin/gdb: replacing existing signature
liumiaocn:cert liumiao$
r命令后卡住
liumiaocn:gdb liumiao$ gcc -g main.c 
liumiaocn:gdb liumiao$ gdb a.out
GNU gdb (GDB) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin19.5.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
.
Find the GDB manual and other documentation resources online at:
    .

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from a.out...
Reading symbols from /Users/liumiao/tt/gdb/a.out.dSYM/Contents/Resources/DWARF/a.out...
(gdb) b main
Breakpoint 1 at 0x100000c8c: file main.c, line 26.
(gdb) r
Starting program: /Users/liumiao/tt/gdb/a.out 
[New Thread 0x1903 of process 7273]
  • 对应方法 目前本文使用的Catalina的缺省terminal目前存在这个问题,伤未发现太好的办法,建议直接换成iterm2进行使用:https://www.iterm2.com/
其他问题

安装时已经提示,Sierra之后由于系统集成性保护SIP的缘故,需要在.gdbinit或者每次执行之前设定startup-with-shell 未off

On 10.12 (Sierra) or later with SIP, you need to run this:
  echo "set startup-with-shell off" >> ~/.gdbinit
参考内容

https://sourceware.org/gdb/wiki/PermissionsDarwin

关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

0.7485s