MAC OSX系统使用gdb编译程序时的报错处理
2017-11-12 21:41
176 查看
计组用gdb编译如下程序
(gdb) l
1 #include<stdio.h>
2
3 int printf(const char*,...);
4
5 int main(){
6 const char* format = "Hello World!\n%X PointTo?\n";
7 char* magic = "HeiHeiHei";
8 printf(format, &magic);
9 }在终端进行编译测试,提示以下报错信息
(gdb) run
Starting program: /Users/xujiaxing/Downloads/lab3_补充题目/b
Unable to find Mach task port for process-id 74
4000
44: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
报错分析:
系统出于安全的考虑,在没有授权的情况下不允许gdb调试任何程序,因为gdb调试可以掌握了进程的控制权。
如果改为root用户就没有这个问题。
解决方法
给gdb授予系统完全信任的代码签名权利,创建方法如下:
1,启动“钥匙串访问”应用
2,创建证书:打开菜单:钥匙串访问-》证书助理-》创建证书
3,按图中输入和修改以下信息,
输入证书名称,名称可以自己起,该处为gdb-cert
选择证书类型:代码签名
勾选:让我覆盖这些默认签名
4,一路继续,出现以下窗口时,选择 系统。
5,点击创建,输入系统管理员密码 ,这样证书就创建完成了,然后需要修改证书属性,
找到刚才新建的证书,右键证书选择【显示简介】,打开证书属性窗口,点击【信任】,
在 【使用此证书时】的下拉列表中 选择【始终信任】,然后在弹出的输入管理员密码窗口中,
输入正确的密码,修改完成
6,把创建和修改好的(代码签名证书)按如下命令赋给 gdb调试程序,然后重启电脑生效。
在终端输入
但是在完成后还出现了其他问题,运行时出现如下报错
Mac OS X 10.12.5及更新版本的解决方案
在home-direcetory中创建一个.gdbinit文件,在其中写入“set startup-with-shell off”。
文件可以使用创建
重新启动终端即可。
参考资料:
https://yq.aliyun.com/articles/55982
https://stackoverflow.com/questions/40052171/gdb-terminated-with-signal-unknown-signal
(gdb) l
1 #include<stdio.h>
2
3 int printf(const char*,...);
4
5 int main(){
6 const char* format = "Hello World!\n%X PointTo?\n";
7 char* magic = "HeiHeiHei";
8 printf(format, &magic);
9 }在终端进行编译测试,提示以下报错信息
(gdb) run
Starting program: /Users/xujiaxing/Downloads/lab3_补充题目/b
Unable to find Mach task port for process-id 74
4000
44: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
报错分析:
系统出于安全的考虑,在没有授权的情况下不允许gdb调试任何程序,因为gdb调试可以掌握了进程的控制权。
如果改为root用户就没有这个问题。
解决方法
给gdb授予系统完全信任的代码签名权利,创建方法如下:
1,启动“钥匙串访问”应用
2,创建证书:打开菜单:钥匙串访问-》证书助理-》创建证书
3,按图中输入和修改以下信息,
输入证书名称,名称可以自己起,该处为gdb-cert
选择证书类型:代码签名
勾选:让我覆盖这些默认签名
4,一路继续,出现以下窗口时,选择 系统。
5,点击创建,输入系统管理员密码 ,这样证书就创建完成了,然后需要修改证书属性,
找到刚才新建的证书,右键证书选择【显示简介】,打开证书属性窗口,点击【信任】,
在 【使用此证书时】的下拉列表中 选择【始终信任】,然后在弹出的输入管理员密码窗口中,
输入正确的密码,修改完成
6,把创建和修改好的(代码签名证书)按如下命令赋给 gdb调试程序,然后重启电脑生效。
在终端输入
which gdb /usr/local/bin/gdb codesign -s gdb-cert /usr/local/bin/gdb
但是在完成后还出现了其他问题,运行时出现如下报错
(gdb) run Starting program: /Users/xujiaxing/Downloads/lab3_补充题目/b During startup program terminated with signal ?, Unknown signal.
Mac OS X 10.12.5及更新版本的解决方案
在home-direcetory中创建一个.gdbinit文件,在其中写入“set startup-with-shell off”。
文件可以使用创建
vi ~/.gdbinit。
重新启动终端即可。
参考资料:
https://yq.aliyun.com/articles/55982
https://stackoverflow.com/questions/40052171/gdb-terminated-with-signal-unknown-signal
相关文章推荐
- winXP(同时也适用于win7)系统使用打印机时“后台处理程序服务没有运行”时的解决办法
- 怎样使用ninja编译系统编译我们的程序?
- 使VC6编译的程序也使用当前系统风格
- 使用VS+VisualGDB编译调试Linux程序
- Ubuntu系统下的Hadoop集群(4)_使用Eclipse编译运行MapReduce程序
- 在windows下使用gcc+gdb编译和调试程序
- 使用VS+VisualGDB编译调试Linux程序
- Android 系统中使用GDB调试C程序
- 如何使用ninja编译系统编译我们的程序?
- 使用VS+VisualGDB编译调试Linux程序
- 《软件调试的艺术》学习笔记——GDB使用技巧摘要(3)——程序崩溃处理
- 使用VS+VisualGDB编译调试Linux程序
- 使用VS+VisualGDB编译调试Linux程序
- IIS网站或系统验证码不显示问题——"使用了托管的处理程序,但是未安装或未完整安装 ASP.NET"
- GDB arm-linux交叉编译移植和使用方法(特别是对于正在运行的程序或者段错误的程序进行分析)
- Linux系统平台下关于GCC编译及使用的方法(-Werror,它要求GCC将所有的警告当成错误进行处理 )
- 使用VS+VisualGDB编译调试Linux程序
- 《软件调试的艺术》学习笔记——GDB使用技巧摘要——程序崩溃处理
- IIS网站或系统验证码不显示问题——"使用了托管的处理程序,但是未安装或未完整安装 ASP.NET"
- IIS网站或系统验证码不显示问题——"使用了托管的处理程序,但是未安装或未完整安装 ASP.NET"