这篇文章介绍一下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