在GDB中完成类似vs的set next statement的行为

在visual studio中,可以同鼠标右键在源代码的指定位置,选择set next statement来快速控制程序到指定位置开始执行。这可以让那些粗心大意的程序员无需重复前面的步骤,查看之前程序是如何运行的。

在GDB中,这一行为由两个指令完成。
1、break point
2、jump point

注意
1、如果将指针设置为当前执行函数以外的位置,会造成各种未知的后果(有兴趣可以自行尝试)
2、如果在代码运行逻辑上,执行了未初始化的代码,或者执行了不能重复执行代码,也会造成未知的后果

例子
源码
#include <iostream>

using namespace std;

int main()
{
cout << "line1" << endl;
cout << "line2" << endl;
cout << "line3" << endl;
cout << "line4" << endl;
cout << "line5" << endl;
cout << "line6" << endl;
cout << "line7" << endl;
return 0;
}

编译
g++ -g gdbjump.cpp -o gdbjump

调试
gdb gdbjump

调试操作
(gdb) b main
Breakpoint 1 at 0x400848: file gdbjump.cpp, line 7.
(gdb) r
Starting program: ~/temp/gdbjump
warning: no loadable sections found in added symbol-file system-supplied DSO at 0x2aaaaaaab000

Breakpoint 1, main () at gdbjump.cpp:7
7 cout << "line1" << endl;
(gdb) b 9
Breakpoint 2 at 0x400880: file gdbjump.cpp, line 9.
(gdb) jump 9
Continuing at 0x400880.

Breakpoint 2, main () at gdbjump.cpp:9
9 cout << "line3" << endl;
(gdb) n
line3
10 cout << "line4" << endl;
(gdb) n
line4
11 cout << "line5" << endl;
(gdb) n
line5
12 cout << "line6" << endl;
(gdb) n
line6
13 cout << "line7" << endl;
(gdb) n
line7
14 return 0;
(gdb) n
15 }
(gdb) c
Continuing.

Program exited normally.

说明:line1和line2将不被打印出来

在GDB中完成类似vs的set next statement的行为,布布扣,bubuko.com

时间: 2024-11-10 00:54:18

在GDB中完成类似vs的set next statement的行为的相关文章

[转] gdb中忽略信号处理

信号(Signals) 信号是一种软中断,是一种处理异步事件的方法.一般来说,操作系统都支持许多信号.尤其是UNIX,比较重要应用程序一般都会处理信号.UNIX定义了许 多信号,比如SIGINT表示中断字符信号,也就是Ctrl+C的信号,SIGBUS表示硬件故障的信号:SIGCHLD表示子进程状态改变信号: SIGKILL表示终止程序运行的信号,等等.信号量编程是UNIX下非常重要的一种技术. GDB有能力在你调试程序的时候处理任何一种信号,你可以告诉GDB需要处理哪一种信号.你可以要求GDB收

Android项目中使用类似菊花的Dialog

Android项目中使用类似菊花的Dialog 效果图一: 项目中使用的效果图二: 1.首先定义动画文件 <?xml version="1.0" encoding="utf-8"?> <animated-rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/loading2"

GDB中应该知道的几个调试方法

七.八年前写过一篇<用GDB调试程序>,于是,从那以后,很多朋友在MSN上以及给我发邮件询问我关于GDB的问题,一直到今天,还有人在问GDB的相关问题.这么多年来,有一些问题是大家反复在问的,一方面,我觉得我以前的文章可能没有说清楚,另一方面,我觉得大家常问的问题正是最有用的,所以,在这里罗列出来.希望大家补充. 一.多线程调试多线程调试可能是问得最多的.其实,重要就是下面几个命令: info thread 查看当前进程的线程.thread <ID> 切换调试的线程为指定ID的线程

GDB中应该知道的几个调试方法 来自陈皓

GDB中应该知道的几个调试方法 2011年2月10日陈皓发表评论阅读评论62,325 人阅读 七.八年前写过一篇<用GDB调试程序>,于是,从那以后,很多朋友在MSN上以及给我发邮件询问我关于GDB的问题,一直到今天,还有人在问GDB的相关问题.这么多年来,有一些问题是大家反复在问的,一方面,我觉得我以前的文章可能没有说清楚,另一方面,我觉得大家常问的问题正是最有用的,所以,在这里罗列出来.希望大家补充. 一.多线程调试 多线程调试可能是问得最多的.其实,重要就是下面几个命令: info th

使用call命令在GDB中重复调用某函数

在白盒测试中经常使用GDB进行函数的分支覆盖测试,但在测试对象函数触发很困难,测试效率就很低下. 假设测试函数fun1有10条分支.每次进入fun1需设置10个变量. 那么一般情况下要在GDB中操作10 * 10 = 100次才能将该分支覆盖完毕. 经过查找,GDB中存在一种方法,重复调用该函数,使用10+10 =20次即可覆盖分支. GDB使用步骤: 1)首先对该函数打断点 有以下函数: int webprc_cmmenu_lchk(WEB_CMMENU_LAN_PATH_CHK_STATUS

Swift中的类似scala的foldleft方法的实现

extension Array {     func foldLeft(a:T, action:(T, T)->T)->T {         var ret:T = a         for b:T in self {             ret = action(ret,b)         }         return ret     } } 把这个放到项目当中任何一个swift文件当中,即可全局访问. 示例: 求最小值 var t = [1,3,5,4,9,100,6,-2]

【转】GDB中应该知道的几个调试方法

文章来源:http://coolshell.cn/articles/3643.html GDB中应该知道的几个调试方法 2011年02月10日 陈皓 评论 40 条评论  70,776 人阅读 七.八年前写过一篇<用GDB调试程序>,于是,从那以后,很多朋友在MSN上以及给我发邮件询问我关于GDB的问题,一直到今天,还有人在问GDB的相关问题.这么多年来,有一些问题是大家反复在问的,一方面,我觉得我以前的文章可能没有说清楚,另一方面,我觉得大家常问的问题正是最有用的,所以,在这里罗列出来.希望

在 asp.net core 中使用类似 Application 的服务

在 asp.net core 中使用类似 Application 的服务 Intro 在 asp.net 中,我们可以借助 Application 来保存一些服务器端全局变量,比如说服务器端同时在线的人数计数,比如一些网站的配置信息. 在 ASP.NET 应用中,之前开发的活动室预约系统把网站的 keyword 以及 Title 等信息,在网站启动的时候会从数据库加载配置并保存到 Application 中,在需要的地方直接使用 Application 来获取,后台更新配置之后,更新 Appli

gdb中一些常用的调试命令

show version :显示gdb版本信息 info functions :列出可执行文件的所有函数名称 step(缩写s):进入函数(函数必须有调试信息) next(缩写n):不进入函数,gdb会等函数执行完,再显示下一行要执行的程序代码 finish:当单步调试一个函数时,如果不想继续跟踪下去,使用finish,函数会继续执行完,并且打印返回值 return 或者return expression :命令指定函数的返回值 call 或print :如call func(),该命令直接调用