博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

2020年10月26日

摘要: GDB编辑、搜索源码以及在线帮助 本节主要讲解的是在 GDB 内对源文件中的代码进行修改和查找,分别对应 GDB 中的 edit 命令和 search 命令,下面是对这两个命令的详细介绍。 GDB edit命令:编辑文件 在 GDB 中编辑源文件中使用 edit 命令,该命令的语法格式如下: (gd 阅读全文

posted @ 2020-10-26 13:32 面具下的戏命师 阅读(545) 评论(0) 推荐(0) 编辑

摘要: GDB查看栈信息 当程序因某种异常停止运行时,我们要做的就是找到程序停止的具体位置,分析导致程序停止的原因。对于 C、C++ 程序而言,异常往往出现在某个函数体内,例如 main() 主函数、调用的系统库函数或者自定义的函数等。要知道,程序中每个被调用的函数在执行时,都会生成一些必要的信息,包括: 阅读全文

posted @ 2020-10-26 13:19 面具下的戏命师 阅读(739) 评论(0) 推荐(0) 编辑

摘要: GDB信号处理 C、C++ 程序中,信号常常作为进程间通信的一种重要手段。举个例子: #include <stdio.h> #include <unistd.h> #include <signal.h> void display(){ printf("http://c.biancheng.net/g 阅读全文

posted @ 2020-10-26 11:41 面具下的戏命师 阅读(619) 评论(0) 推荐(0) 编辑

摘要: GDB反向调试 GDB 调试器对代码进行单步调试和断点调试。这 2 种调试方法有一个共同的特点,即调试过程中代码一直都是“正向”执行的(从第一行代码执行到最后一行代码)。这就产生一个问题,如果调试过程中不小心多执行了一次 next、step 或者 continue 命令,又或者想再次查看刚刚程序执行 阅读全文

posted @ 2020-10-26 11:36 面具下的戏命师 阅读(540) 评论(0) 推荐(0) 编辑

摘要: GDB调试多进程程序 GDB调试器不只可以调试多线程程序,还可以调试多进程程序。对于 C 和 C++ 程序而言,多进程的实现往往借助的是<unistd.h>头文件中的 fork() 函数或者 vfork() 函数。举个例子: #include <stdio.h> #include <unistd.h 阅读全文

posted @ 2020-10-26 11:27 面具下的戏命师 阅读(1936) 评论(0) 推荐(0) 编辑

摘要: GDB后台调试命令 前面章节中,我们已经接触了很多调试命令,如 run(r)、continue(c)、next(n)等,借助它们即可操控 GDB 调试目标程序。有些读者可能已经注意到,这些调试命令在执行过程中,是无法使用其它 GDB 调试命令的,换句话说,只有当一个调试命令执行结束后,(gdb) 命 阅读全文

posted @ 2020-10-26 11:04 面具下的戏命师 阅读(849) 评论(0) 推荐(0) 编辑

摘要: GDB non-stop模式 对于调试多线程程序,GDB 默认采用的是 all-stop 模式,即只要有一个线程暂停执行,所有线程都随即暂停。这种调试模式可以适用于大部分场景的需要,借助适当数量的断点,我们可以清楚地监控到各个线程的具体执行过程。 但在某些场景中,我们可能需要调试个别的线程,并且不想 阅读全文

posted @ 2020-10-26 10:53 面具下的戏命师 阅读(779) 评论(0) 推荐(0) 编辑