gdb调试

1.gdb是什么?

官网介绍:

  GDB, the GNU Project debugger, allows you to see what is going on `inside' another program while it executes -- or what another program was doing at the moment it crashed.

  GDB是GNU工程调试器,让你能够看到程序内部是如何执行的,或者在程序崩溃的时刻程序在干什么。说白了就是一个调试程序的工具。

  GDB can do four main kinds of things (plus other things in support of these) to help you catch bugs in the act:

  GDB可以做四类事情来帮助你捕捉实际中的bug。
  • Start your program, specifying anything that might affect its behavior.

    启动程序,查看影响程序行为的任何细节。
    
  • Make your program stop on specified conditions.

    让你的程序在特定条件下停止。
    
  • Examine what has happened, when your program has stopped.

    测试当你的程序停止时到底发生了什么。
    
  • Change things in your program, so you can experiment with correcting the effects of one bug and go on to learn about another.

2.demo

下面均以此有问题的程序test_error.c说事。
#include<stdio.h>

int main()
{    
    int* pNum = NULL;
    *pNum = 100;
    return 0;
}
  首先编译程序然后进入调试状态:
  • 其中-g是要生成符号文件,否则当使用gdb调试时会提示没有符号文件,如下图所示。

 

 

3.gdb命令以及调试

首先apt-get install gdb进行安装。

  • gdb a.out :进入调试状态。

  • list :列出程序代码,包含行数 然后就可以设置断点了。

  • break(r):设置断点:b 3或者b main 在第三行或者main函数处设置断点。

  • run(r):程序执行。

  • print(p) 变量 :查看变量在当前断点处的信息。

  • info b :查看断点信息。

  • next(n):单步执行。

    以下是一个简单的调试过程:

 

4.调试崩溃core文件

    在我们运行程序时经常会遇见:段错误,核心已转储之类的提示。或者只有段错误,注意在这种情况下是因为ulimit的问题,所以没有生成崩溃信息文件。

当我们需要调试一个崩溃程序时,首先得生成崩溃信息文件:core。

  • ulimit -c 查看允许的崩溃文件大小,如果没有开启则结果是0.
  • ulimite -c unlimited手动开启即可.

接下来启动gdb运行以下命令:

gdb a.out core

gdb会直接定位到你的崩溃代码处!如下图:

 然后就会直接跳到崩溃代码处。此处是因为p为空指针却给赋了值!

 5.调试nodejs

注意在gdb中设置参数的方法:set args a b c

当nodejs调用了C++插件,而插件中存在崩溃时,也可以用gdb来调试。

 直接在js中调用时可能看不出直接问题:

此时启用gdb调试: 

 此时问题直接定位到了。刚开始gdb进去的时候是不能给.node设置断点的(或者我不会),r之后会加载进去,之后输入list则会显示出demo.cc的代码,此时可利用b、n进行断点设置及单步运行调试。

另外:貌似可以直接给库文件打断点:此时其实需要源文件 

 

6.收工

perfect!
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我啥都会

如果觉得对您有帮助,打赏一下吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值