一 mac下gdb签名错误:
一个常用的解决方法就是给gdb授予系统完全信任的代码签名权利,以对其他进程。
首先,需要创建一个系统代码签名信任证书:
- 启动“钥匙串访问”应用(/Applications/Utilities/Keychain Access.app)
- 打开菜单:钥匙串访问-》证书助理-》创建证书...
- 输入证书名称,如:gdb-cert;
- 选择身份类型:自签名根证书 (Identity Type to Self Signed Root)
- 选择证书类型:代码签名 (Certificate Type to Code Signing)
- 勾选:让我覆盖这些默认签名 (select the Let me override defaults)
- 一路继续,直到选择存放证书地址,选择:系统
- 这样证书就创建好了,还要设置证书自定义信任
- 右键刚才创建的 gdb-cert 证书,选择“显示简介” (Get Info)
- 点击“信任”,会显示可以自定义的信任选项
- “代码签名”选择“总是信任” (Code Signing to Always Trust)
其次,将证书授予gdb,执行命令
>codesign -s gdb-cert /path to gdb
二,调试常用命令
gdb #查看gdb调试器的信息
gdb filename #调试该可执行文件,该文件在编译时,必须加入-g或者-ggdb选项才可以
## 常用命令
file #装入想要调试的可执行文件
run #执行当前被调试的程序
kill #终止正在调试的程序
step #执行一行源代码并且进入函数的内部
next #执行一行源代码,但不进入函数的内部
break #在程序里设置断点,使程序执行到这里时被挂起
print #打印表达式或者变量的值,还可以用来对变量进行复赋值
display #设置自动显示的表达式或者变量,当程序停下或者单步跟踪时,这些变量会自动显示当前值
list #列出产生执行文件的源代码的一部分
quit #退出gdb
watch #使用户能够监视一个变量的值而不管其何时被改变
backtrace #回溯跟踪
frame n #定位到发生错误的代码段,n为backtrace命令的输出结果中的行号
examine #查看内存地址中的值
jump #是程序跳转执行
signal #产生信号量
return #强制函数返回
call #调用函数
make #使用户不退出gdb产生可执行文件
shell #不离开gdb就能执行shell命令
bt #显示内存堆栈
f n #进入堆栈号为n的堆栈
p a #打印变量a的值
x/2d #打印连续两个整型变量的值
x/3cb #打印3个字符,按字节打印