gdb命令和使用示例
程序员文章站
2022-03-02 18:13:31
...
原文链接:http://www.javaarch.net/jiagoushi/799.htm
gdb命令和使用示例
b main - 在main函数开始处设置断点
b - 在当前行设置断点
b N - 在第N行设置断点
b +N - 在当前行后第N行设置断点
b fn - 在函数fn出设置断点
d N - 删除第N个断点
info break - 查看所有断点
r - 继续执行,直到有异常或者退出
c - c继续到下一个断点
f - 执行直到当前函数结束
s - 单步执行
s N - 执行下面N行
n - 单步跳过执行
u N - 执行到当前行所在的前N行处
p var - 打印当前变量var的值
bt - 打印当前堆栈信息
u - 执行到当前堆栈的上一个
d - 执行到当前堆栈的下一个
q - 退出gdb
示例:
#include <iostream>
using namespace std;
void setint(int*, int);
int main() {
int a;
setint(&a, 10);
cout << a << endl;
int* b;
setint(b, 10);
cout << *b << endl;
return 0;
}
void setint(int* ip, int i) {
*ip = i;
}
编译:
$g++ -g crash.cc -o crash
执行:
segmentation fault (core dumped)
使用gdb调试这个error
$ gdb crash
(gdb) r
Starting program: /home/tmp/crash
10
10
Program received signal SIGSEGV, Segmentation fault.
0x4000b4d9 in _dl_fini () from /lib/ld-linux.so.2
(gdb) where
#0 0x4000b4d9 in _dl_fini () from /lib/ld-linux.so.2
#1 0x40132a12 in exit () from /lib/libc.so.6
#2 0x4011cdc6 in __libc_start_main () from /lib/libc.so.6
#3 0x080485f1 in _start ()
(gdb)
(gdb) b main
# Set a breakpoint at the beginning of the function main
(gdb) r
# Run the program, but break immediately due to the breakpoint.
(gdb) n
# n = next, runs one line of the program
(gdb) n
(gdb) s
setint(int*, int) (ip=0x400143e0, i=10) at crash2.C:20
# s = step, is like next, but it will step into functions.
# In this case the function stepped into is setint.
(gdb) p ip
$3 = (int *) 0x400143e0
(gdb) p *ip
1073827128
这里ip的指针没有初始化,所以指向内存位置是随机的,这里会导致core dump。
上一篇: spring boot 读取application.yml自定义配置文件
下一篇: 生命只有一次
推荐阅读
-
python的三目运算符和not in运算符使用示例
-
使用HTML5和CSS3制作一个模态框的示例
-
php类声明和php类使用方法示例分享
-
浅析Linux中使用nohup及screen运行后台任务的示例和区别
-
如何使用Linux命令行检测DVD刻录机的名字和读写速度
-
使用ajax和history.pushState无刷新改变页面URL示例
-
Linux下安装Memcached服务器和客户端与PHP使用示例
-
android使用url connection示例(get和post数据获取返回数据)
-
android使用handler ui线程和子线程通讯更新ui示例
-
Laravel源码解析之路由的使用和示例详解