macos 10.15/Catalina 用不了gdb

主要有两个问题:

  • Unable to find Mach task port for process-id xxx
  • new Thread然后卡住
    下面分别叙述两个问题
异常情况: Unable to find Mach task port for process-id 60832: (os/kern) failure (0x5).
Unable to find Mach task port for process-id 60832: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))
参考综述
  • (最简单的解决问题办法, sudo)这个回答, sudo. 的确可以, 但是治标不治本, 于是我才往后看, 但其实已经可以解决问题了.
  • (可以不看, 后面已包含)CSDN上的博客, 跟着这个教程创建证书, 证书可以在keychains->system->gdb_codesigned(证书名)中查看. 但是跟着它不行, 实际上,
  • (可以不看)这个回答, 与上一篇博客内容相仿, 但也不行
  • (解决问题的)gdb wiki, 跟着它走就行. 但是加上一点, 它建议重启的地方, 可以不重启, 但是要先找到所有gdb进程, 然后kill -9.
出现异常的原因和解决思路

如果一个进程想要访问其它进程的pid, 需要数字签名 解决办法, 如博客所说, 是创建证书, 并且trust all.
问题是怎么让它生效. 参考"wiki" 中, 最重要的一点是: 要么重启(比较稳的做法), 要么一定要kill -9 干净.

[New Thread 0xf03 of process 61569] then get stuck

说的解决办法就是在.gitinit中添加

set startup-with-shell off

首先怎么结束? ctrl+Z.

发现是

61567   0.0  0.1  4279152  14140 s009  T    10:05AM   0:00.10 gdb ./a.out

那么61569是啥? 是a.out进程. 我怀疑是gdb是一个进程, 它又开了子进程, 就是它调试的程序.

再开gdb, 这个问题就解决了. 但出现问题的原因还不明白.

原文地址:https://www.cnblogs.com/Tokubara/p/14291542.html