主要有两个问题:
- 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, 这个问题就解决了. 但出现问题的原因还不明白.