为什么我在调试某些c程序的时候,GDB会跳过一些本来应该执行的语句? [问题点数:40分,结帖人hadesgin]

Gin
Bbs1
本版专家分:1
结帖率 33.33%
Bbs12
本版专家分:378177
Blank
状元 2017年 总版技术专家分年内排行榜第一
Blank
榜眼 2014年 总版技术专家分年内排行榜第二
Blank
探花 2013年 总版技术专家分年内排行榜第三
Blank
进士 2018年总版新获得的技术专家分排名前十
2012年 总版技术专家分年内排行榜第七
Gin
Bbs1
本版专家分:1
Bbs6
本版专家分:6164
Blank
蓝花 2012年2月 C/C++大版内专家分月排行榜第三
Bbs9
本版专家分:64969
Blank
红花 2011年8月 C/C++大版内专家分月排行榜第一
2010年12月 C/C++大版内专家分月排行榜第一
Blank
黄花 2019年4月 扩充话题大版内专家分月排行榜第二
2019年3月 扩充话题大版内专家分月排行榜第二
2011年9月 C/C++大版内专家分月排行榜第二
2011年4月 C/C++大版内专家分月排行榜第二
2010年11月 C/C++大版内专家分月排行榜第二
Blank
蓝花 2011年6月 C/C++大版内专家分月排行榜第三
gdb 调试时指定跳到第几行
转自:http://www.toptip.ca/2010/06/<em>gdb</em>-skip-instructions-or-lines-while.html
程序直接运行和用gdb单步执行结果不同
前段时间<em>调试</em>代码时发现  <em>程序</em>直接运行的结果怎么都不正确,  但使用<em>gdb</em>单步<em>执行</em>时结果却总是正确的。 最开始以为使用<em>gdb</em>单步<em>执行</em>与<em>程序</em>直接运行的区别无非就是对多线程的影响,可查来查去没有发现线程安全问题。 后来仔细梳理了现象并啃了一遍代码后才发现,<em>gdb</em>单步<em>执行</em>也会对网络io产生影响。 我当时的现象就是: 直接运行时,读到的HTTP响应总是只有head没有body;
使用gdb调试C++程序时,感觉不按流程执行,跳来跳去的解决办法
在使用<em>gdb</em>进行<em>调试</em>的<em>时候</em>,依赖于g++的编译结果,因为在编译时默认使用了优化,所以导致没按代码顺序<em>执行</em>,其实只需要将g++的编译优化关掉就可以了。  <em>gdb</em><em>调试</em><em>程序</em>的<em>时候</em>打印变量值会出现 情况,可以在gcc编译的<em>时候</em>加上 -O0参数项,意思是不进行编译优化,<em>调试</em>的<em>时候</em>就会顺畅了,运行流程不会跳来跳去的,发布项目的<em>时候</em>记得不要在使用 -O0参数项,gcc 默认编译或加上-O2优化编译会提高程
Debug时如何跳过(不执行)某些代码
在DEBUG界面, 光标定位到想跳至的代码行, 从右键菜单中选择Goto Statement, 或者从Debugger菜单中选择:     可见代码确实被<em>跳过</em>了, 这个在实际工作中, 尤其是生产机的<em>调试</em>中还是很有用处的. 完美!
gdb调试程序,不按顺序执行
因为在linux下<em>程序</em>在编译的<em>时候</em>做了代码优化,如果想要在<em>调试</em>时按顺序<em>执行</em>的话可以通过设置make CFLAGS=&quot;-g -O0&quot;来使得编译器不做代码优化-O就是优化等级-O0就是不做优化...
C语言的终端操作跳过输入的问题
在终端操作时 有时会<em>跳过</em>拿条输入<em>语句</em> 是因为输入字符是以'\0',为识别结束的,在平时是没有问题,但若是在之前的<em>程序</em>操作最后又一个‘\0’。系统会识别为输入完成 所以<em>跳过</em>了这条输入<em>语句</em>--------------------------------- 解决方法:在进入输入<em>语句</em>之前,添加一条getchar(); 这样才行。。。。。。。。。。 getchar(); if(a[i].age
一点对C语言中跳过scanf语句的理解
scanf<em>语句</em>是从缓冲区中读取数据,如果发现自己的scanf被莫名的<em>跳过</em>,那肯定是缓冲区里含有其他的数据咯,可以用getchar()<em>语句</em>把缓冲区的数据舍弃掉,当然这只是一般的情况,今天本人就碰见了个复杂点的,在调用了一个函数后缓冲区没有被清空,在发生这种情况后,思考方向一定是上一个scanf<em>语句</em>,
C语言中scanf被跳过-求大神解决
这段<em>程序</em>在vc++6.0中编译组建都没有问题,可是运行后发现里面有一段代码被<em>跳过</em>了,如何解决? # include int main(void) { double number1, number2; char operation; char answer; start: printf("\nEnter the calculation\n"); scanf("%lf %c
Java:为何不等输入就跳过了?
有BUG的代码: public Integer getIntegerNumber(String tips) { System.out.print(tips); return input.nextInt(); } public String getString(String tips) { System.out.prin...
如何调试程序时 从第一条指令开始执行
一般我们在iar上面<em>调试</em>的<em>时候</em>,<em>程序</em>往往是从main函数的第一行开始运行的。当我们需要查看main函数之前的操作流程的<em>时候</em>,就需要进行以下的设置: 在工程上面右键->option->Debugger->Setup->run to main之前的勾去掉
gdb调试问题总结
1,怎么在<em>gdb</em>开启的<em>时候</em>加入<em>调试</em>命令,如断点、设置运行参数     <em>gdb</em>有个-x参数,后面接一下存储<em>gdb</em><em>调试</em>命令的文本文件,所以可以实现写个文本文件,把一开始必要的断点和<em>调试</em>环境以及运行参数设置写进去,然后用-x参数读入即可:    command.txt break main set print pretty run train --solver=models/bvlc_r
Debug时如何跳过(不执行)/回滚执行某些代码
Debug时如何<em>跳过</em>(不<em>执行</em>)<em>某些</em>代码 在DEBUG界面, 首先将光标定位到想跳至的代码行, 然后从右键菜单中选择Goto Statement,   或者从Debugger菜单中选择Goto Statement:(效果相同)      然后光标就会定位到想跳至的代码行 <em>执行</em>结果如下: 结果是0+0=0的原因是:先打了断点在第16行,然后我使用Goto Statement
C++ cin被跳过
问题: 今天写代码发生了第二个cin被<em>跳过</em>的情况,原来是因为我的第一个cin,输入的是文件路径,较长,自动换行了,也就产生了两次换行(\n),所以第二个cin发现有换行就不等待输入了,直接存了一个空的内容。 解决方法:cin.ignore() basic_istream& ignore( streamsize _Count = 1, int_type _Delim = tra
GDB调试正在运行的程序
原文链接:点击打开链接       有时会遇到一种很特殊的<em>调试</em>需求,对当前正在运行的其它进程进行<em>调试</em>(正是我今天遇到的情形)。这种情况有可能发生在那些无法直接在<em>调试</em>器中运行的进程身上,例如有的进程 只能在系统启动时运行。另外如果需要对进程产生的子进程进行<em>调试</em>的话,也只能采用这种方式。GDB可以对正在<em>执行</em>的<em>程序</em>进行调度,它允许开发人员中断<em>程序</em> 并查看其状态,之后还能让这个<em>程序</em>正常地继续<em>执行</em>。
C/C++经典问题:[未输入字符,输入语句被直接跳过] 的多种解决方案
比如: 原因:输入了xx,然后一个回车后,回车的结果是,除了“xx”还向标准输入流(stdin)输入了一个换行符'\n'(c/c++),而scanf/gets/cin只吸收了xx,而'\n'仍然在stdin里面,一旦遇到cin.getline()/gets(s)  scanf("%s",s)等等接受回车的输入<em>语句</em>,就会将输入流中的回车吸收,所以会没等用户输入就完成输入,并且接受的是回车符
3.c中关于程序中的gets()语句跳过,不接受键盘输入的原因
  C语言里的gets()函数功能是从输入缓存中读取多个字符,遇到回车符时,结束输入。 当使用gets()函数之前有过数据输入,并且,操作者输入了回车确认,这个回车符没有被清理,被保存在输入缓存中时,gets()会读到这个字符,结束读字符操作。因此,从用户表面上看,gets()没有起作用,<em>跳过</em>了这一句 原因深入分析:当<em>程序</em><em>执行</em>到gets()这一句时,跑去输入缓冲区读取内容...
“逐语句”、“逐过程”、“跳出”命令 (“调试”菜单)的使用
逐<em>语句</em> 一次<em>执行</em>一个<em>语句</em>。 当不在设计方式时,“逐<em>语句</em>”会在当前<em>执行</em>行上进入中断模式。如果此<em>语句</em>是对一个过程的调用,下一个被显示的<em>语句</em>就是该过程内的第一个<em>语句</em>。 在设计时,此菜单项会开始<em>执行</em>并在第一行<em>程序</em>被<em>执行</em>前进入中断模式。 如果没有指定当前<em>执行</em>点,“逐<em>语句</em>”命令可能不会有任何作用,除非以某种方式引发了代码,例如在文档上点一下。 键盘快捷键:F8。 逐过程 与“逐<em>语句</em>” 相似。只有在当前
如何用gdb运行root程序
在公司的一套自建系统里,有个抓包<em>程序</em>经常出现异常重启,单独启动打印日志显示,有段错误。 采用<em>gdb</em><em>调试</em>发现无法正常<em>调试</em>。因为抓包<em>程序</em>需要root权限,所以该<em>程序</em>的所有者是root,而根据资料显示 “在下列条件下不产生core文件: ( a )进程是设置-用户-ID,而且当前用户并非<em>程序</em>文件的所有者; ( b )进程是设置-组-ID,而且当前用户并非该<em>程序</em>文件的组所有者; ( c )
gdb调试linux可执行程序
[root@localhost CSwapServer_dist]# <em>gdb</em> CSwapServer GNU <em>gdb</em> (GDB) Red Hat Enterprise Linux (7.2-83.el6) Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later
关于xilinx调试过程中的问题
在<em>调试</em>关于物体检测的<em>程序</em>,用ISE14.7编译时出现以下问题 发现14.7不能支持xc7v2000t General Information The ISE 14.7 design tool release contains the v1.11 core.For 7 series Integrated Block for PCI Express v2.2 core relea
关于调试中的printf的坑
对于使用c/c++进行跨平台开发的项目,由于<em>调试</em>手段有限,利用printf打印中间信息就成为了<em>调试</em>中非常重要的手段。但是这种<em>调试</em>手段却让本人掉到了坑里。分享一下。 简介一下背景,做的项目为跨平台的项目,我们通常的方法是首先使用vs在windows下开发和<em>调试</em>,再使用gcc在linux下编译linux版本。<em>程序</em>对于时间比较敏感。 在<em>调试</em>过程中,为了跟踪<em>程序</em>运行,增加了许多的以下<em>语句</em>: ACE_...
GDB调试(正在运行的程序
有时会遇到一种很特殊的<em>调试</em>需求,对当前正在运行的其它进程进行<em>调试</em>(正是我今天遇到的情形)。这种情况有可能发生在那些无法直接在<em>调试</em>器中运行的进程身上,例如有的进程 只能在系统启动时运行。另外如果需要对进程产生的子进程进行<em>调试</em>的话,也只能采用这种方式。GDB可以对正在<em>执行</em>的<em>程序</em>进行调度,它允许开发人员中断<em>程序</em> 并查看其状态,之后还能让这个<em>程序</em>正常地继续<em>执行</em>。 一、多线程<em>调试</em> 多线程<em>调试</em>可能
GDB 调试积累心得,断点,查栈,下一步,跳入,跳出等简单操作
<em>调试</em>相关<em>程序</em>,直接在binary加<em>gdb</em><em>调试</em> <em>gdb</em> ./bin.x86_64/Regression 进入后,  1. 添加断点 b   ParamsTest.cc:356 2. 开始运行 run 3. <em>程序</em>停在断点处,单步<em>调试</em>(进入) s 4. 查看当前代码 l 5. 单步<em>调试</em>(不进入) n 6. 跳出当前代码(之前跳入<em>调试</em>) finish 7. 继续单步<em>调试</em>
VS 2010 调试程序时,遇到错误直接跳出,不崩在错处
vs2010 <em>调试</em><em>程序</em>的<em>时候</em>,遇到错误不崩溃,也不停在那一行,直接<em>跳过</em>去,然后在output窗口说,“xxx 错误,”。很是郁闷。 解决方法: 1.工具->选项-><em>调试</em>->启用异常助手; 2.<em>调试</em>->异常;(那些checkbox的对勾全都勾上)
GDB调试时遇到sigwait阻塞的解决办法
<em>gdb</em><em>调试</em>,遇到sigwait函数,就无法继续运行下去,如同中断一般,却又无法通过C-c停止<em>调试</em>。 其实,只要给<em>程序</em>发送一个信号,让他接受到信号就可以了,比如:kill -2 [进程号] (-2是SIGINT信号) 参考译文: <em>gdb</em> puts the debugged process in its own pgrp and sets the terminal to that p
java中in.nextLine()方法为什么没有执行就直接跳过了?原来如此~
                                有<em>时候</em>发现我想输入的in.nextLine()并没有给我输入的机会。为啥?问题解释:    首先,你需要知道in.nextLine();不能放在in.nextInt();代码段后面。    其实,他不是<em>跳过</em>你了,而是他已经有内容了,内容就是‘\n’。因为nextInt();接收一个整型字符,不会读取\n,nextline();读入一行...
Linux下gdb调试用法命令
一直在Fedora平台下写opencv的<em>程序</em>,需要对<em>程序</em>进行<em>调试</em>,主要用的<em>调试</em>工具是<em>gdb</em>. <em>gdb</em>提供了如下功能: 1.在<em>程序</em>中设置断点,Debug时遇到断点处暂停 2.可以监视某个变量,并利用print函数将该变量的值打印出来 3.<em>程序</em>可step-by-step<em>执行</em> 4.运行时修改变量的值 5.跟踪路径 6.线程切换等 下面结合OpenCV针对C\C++<em>程序</em>使用<em>gdb</em><em>调试</em>进行介绍。
使用gdb调试程序详解和GCC参数详解
熟练使用<em>gdb</em>是一个linux下开发人员必备的一项技能,我们由浅入深的学习一下<em>gdb</em>的强大功能。 一.<em>gdb</em>简单介绍 名称     <em>gdb</em> - GNU Debugger 提要     <em>gdb</em> [-help] [-nx] [-q] [-batch] [-cd=dir] [-f] [-b bps]         [-tty=dev] [-s symfile] [-
Visual Studio C语言调试执行程序时闪退
我们在用Visual Studio 学习C语言时,敲完的代码没有问题,但是<em>程序</em>窗口确会闪退。就是不知道原因,是不是很郁闷。之所以会这样,只是你在最后忘记了敲入这样一串简单的代码:getchar(); include&amp;amp;lt;studio,h&amp;amp;gt; main() { **************; **************; **************; getchar(); //别忘记...
关于VS单步调试乱跳问题
最近一段时间一直在调<em>程序</em>,被一个问题所困扰:Debug模式下,单步<em>调试</em>时,代码指示器到处乱跑,并没有按照行号逐一运行。事实上,这只是假象·,代码还是在逐行运行。造成这种假象的原因是文档中出现了一行写了多行代码的情况,即一行出现了多个分号。保持一行只写一行代码的好习惯!
如何用gdb调试以daemon进程运行的服务
小项目的<em>调试</em>,基本是在编译时加-g选项后,使用<em>gdb</em>可以直接<em>调试</em>。<em>gdb</em> 目标二进制文件名 eg:<em>gdb</em> hello但是大多数服务端<em>程序</em>是以daemon进程形式运行的,demon进程详解见:点我点我这种服务直接<em>gdb</em>是不行的,需要加参数-p 加目标<em>程序</em>端口号。开始<em>调试</em>之前运行ps -x,查看目标<em>程序</em>的PID。<em>gdb</em> -p PID打断点的方法也有点差异,工程较大的<em>时候</em>,打断点方法:b 类型::方法名...
VS2015 程序运行调试错误总结
1.自定义的数组(各种数组)可以进行非法访问(不报错!)但不能进行非法赋值! 运行错误界面 <em>调试</em>错误界面 2.内存开辟的空间必须先赋值,否则报错 3.NULL既不能访问,更不能赋值
调试for循环的技巧
今天用IDEA<em>调试</em>for循环时,断点打在了for的左边,不小心按了F9(跳到下一个断点),意外发现原来可以通过这种方式对for循环的每次循环进行<em>调试</em>,不必自己手动一行行<em>调试</em>才到下一次for循环。这对于一种场景特别适用:假设你需要查看第 5 次循环的某个变量,可以用这种方法按到第 5 次后,再在for循环内你要查看的变量的下一行打断点,这时就能看到要看到的变量的值了。 结合图说明如下: 需求场...
如何使用gdb调试段错误
我们打算使用<em>gdb</em>去解决<em>为什么</em>下面的<em>程序</em>(文件为segfault.c)引起了段错误的问题。下面的这段<em>程序</em>是从用户那里读入一行文本字串然后显示在屏幕上。然而,如下当前的<em>程序</em>并不会如期<em>执行</em>... [cpp] view plaincopyprint? "font-size:18px;">#include    #include       int mai
详解调试概念:单步执行、单步进入、强制进入、单步退出
关于JS、Java的<em>调试</em>,有下面几个概念。基本上所有的<em>调试</em>工具都支持,下面是四个概念的解释   单步<em>执行</em>:Step Over          就是一行一行的<em>执行</em>代码,但不一定会进入到所调用的代码里面,比如说,new了一个对象,但不一定会进入该对象构造方法里面。   单步进入:Step Into          就是调用了一个时,单步进入会进入到该方法里面,除
开源代码分析技巧之二——gdb单步调试
开源代码分析技巧之——<em>gdb</em>单步<em>调试</em>             在海量的源码面前,如何更好的切入到源码,锁定我们需要的那一行,有时显得格外重要。        而通常来讲,我们知道源码包,或多或许我们也同时有<em>一些</em>参考文档(可能不全),并且知道源码能提供的<em>一些</em>功能。比如以Samba4.0.0的源码为例,在samba4.0.0/source4下就有介绍source4新功能说明的帮助文档;在ker
Linux:使用GDB调试C程序
<em>调试</em>指令 指令: 1.编译:gcc -o xxx xxx.c 2.生成可<em>调试</em>文件:gcc -o xxx -g xxx.c 3.<em>调试</em><em>程序</em>:<em>gdb</em> xxx 4.<em>执行</em><em>程序</em>: start 从<em>程序</em>第一步开始<em>执行</em> run 直接运行<em>程序</em>到结束或者断点处 5.设置断点:break line(行数)或函数名或者条件表达式 break 6 在第6行设置断点 b...
Nsight Visual Studio Edition 单机调试+双机调试CUDA程序
结合网上教程之后自己配置Nsight并进行单机和双机<em>调试</em>的过程。32位Win7+VS2008 + CUDA4.0 + Nsight环境,实现对CUDA核函数的<em>调试</em>,可以进入断点观察变量值。
调试程序很慢的问题
今天开始起在Chrome中<em>调试</em>,发现问题主要出在菜单栏(layout文件)中,google了一番,查到很多原因,不过最终解决方法倒是很简单,特此分享一下: 在C:/Windows/System32/drivers/etc里边有一个hosts文件,用记事本打开,里边最后几行原来是: # localhost name resolution is handled within DNS itself.# ...
linux下使用GDB调试C/C++总结(图文教程)
一般来说,GDB主要帮助你完成下面三个方面的功能: 1、启动你的<em>程序</em>,可以按照你的自定义的要求随心所欲的运行<em>程序</em>。 2、可让被<em>调试</em>的<em>程序</em>在你所指定的调置的断点处停住。(断点可以是条件表达式) 3、当<em>程序</em>被停住时,可以检查此时你的<em>程序</em>中所发生的事。 <em>gdb</em><em>调试</em>命令表: 命令 解释 简写 file 加载一个可<em>执行</em>文件,也可以在运行<em>gdb</em>的时
eclipse debug程序为什么不按照行顺序执行
1、<em>程序</em>没有编译 2、没使用Debug编译,使用的是Release编译。 3、有No source file named......的提示
关于keil debug时有些断点打不上的原因分析
keil debug 断点问题 今天在做项目时出了点小问题,想分析问题原因却发现自己相分析问题那一处打不了断点。 这说明一个问题,自己的代码根本没运行到我想断点的地方,那这个<em>时候</em>就要分析一下自己的代码是否方法调用正确。后来我检查到代码就没调用我想调用的方法,改掉这个bug之后,代码即可正常<em>调试</em> ...
调试技巧:让断点停在for循环中i为某个值得时候
即:<em>调试</em>for循环:比如for循环 for (int i = 0; i < 10; i++) { // 一堆代码 //... } 我想让当i==8的<em>时候</em>,断点停止。 那么我就需要:右键左侧的红色圆圈状点->选择 条件 ->在弹出的框中输入   i==
linux应用编程笔记(1)gdb调试方法及如何找出dbg.c程序中的错误
摘要: 介绍了<em>gdb</em><em>调试</em>器以及其使用流程,总结了常用的几个<em>gdb</em><em>调试</em>命令,最后使用这些方法找出dgb.c文件中的错误。 一、<em>gdb</em>简介     <em>gdb</em>是gnu发布的一款功能强大的<em>程序</em><em>调试</em>工具,其主要功能有如下三个:     1.启动被<em>调试</em>的<em>程序</em>。    2.让被<em>调试</em>的<em>程序</em>在指定的位置停住。    3.当<em>程序</em>停住时,可以检查<em>程序</em>状态,例如变量的值。     我们在gcc编译
GDB调试之重定向
如果需要用GDB<em>调试</em>一个正在运行的进程,可以先通过ps 命令查询到进程的ID,然后用 <em>gdb</em> -pid=ID号来启动对这个<em>程序</em>的<em>调试</em>, 如果进程很多,可以用grep过滤一下 ps ax | grep 进程名 也可以在启动<em>gdb</em>后用 atta  进程号的命令实现对进程的<em>调试</em> <em>gdb</em>有个很强大的功能,就是其可以通过call命令调用外部函数, 但是在外面的这种情形,这个调用
VS调试时如何退出当前循环
背景 大家在使用vs<em>调试</em>代码的<em>时候</em>,进入一个循环,如果循环次数较多,会一直停留在这个循环代码里。 如何快速跳出这个循环呢? 解决方案 直接使用“Shift+F11”即可跳出当前循环。 微信搜索“BIM视界”公众号获得BIM行业资讯,以及更多编程干货 ...
c++ gdb调试大全
基础用法1. 简介 GDB(GNU Debugger)是GCC的<em>调试</em>工具。其功能强大,现描述如下:  GDB主要帮忙你完成下面四个方面的功能:  1.启动你的<em>程序</em>,可以按照你的自定义的要求随心所欲的运行<em>程序</em>。  2.可让被<em>调试</em>的<em>程序</em>在你所指定的调置的断点处停住。(断点可以是条件表达式)  3.当<em>程序</em>被停住时,可以检查此时你的<em>程序</em>中所发生的事。  4.动态的改变你<em>程序</em>的<em>执行</em>环境。2 生成<em>调试</em>信息 一般
gdb调试 -带有命令行参数
<em>gdb</em> 可<em>执行</em>文件名; set args 参数1 参数2 ....
GDB运行参数 --给应用传递参数
有三种方法可以指定<em>程序</em>运行的参数,第一种方法是在命令行上直接指定;第二种方法是通过run命令提供<em>程序</em>运行时的参数;第三种方法是通过set args命令指定<em>程序</em>的参数第一种方法:为<em>程序</em>传递参数5root@guo-virtual-machine:~/debug# <em>gdb</em> --args factorial 51第二种方法:为<em>程序</em>传递参数5(<em>gdb</em>) run 5 123第三种方法:为<em>程序</em>传递参数5(gd...
解决cin.getline()函数被跳过执行的问题(与cin连用)
今天编<em>程序</em>时遇到了如下问题: int main() { cout<<<<<<<; //cin.getline(fil
GDB秘技--调试执行代码中的特定函数
在使用GDB<em>调试</em><em>程序</em>时,有时遇到看到数据不知所云,必须对照定义才能看懂, 有时还要做些运算才能看出来,这样效率显然不高. 如果需要查看一个变量类的当前值,简单的数据类型还好说,如果遇到<em>一些</em>枚举型的变量或特殊条件,想要看到清晰的数据输出,就会比较繁琐. 好在GDB提供了一个<em>调试</em>时<em>执行</em>某个函数的功能:call, 在需要时能帮你解决大问题.         举个简单的例子,如果有一个类定义了一
gdb高级调试——反向调试
普通的<em>调试</em>过程都是只能让<em>程序</em>按正向的顺序<em>执行</em>,直到<em>程序</em>运行结束,单步<em>调试</em>也是只能下一步下一步。而反向<em>调试</em>可以实现的是,让<em>程序</em>实现上一步上一步的操作,也就是说让<em>程序</em>反向运行。 首先要强调的一点是反向<em>调试</em>不适用io操作,碰到io操作是无法运行下去的。所以反向测试的<em>时候</em>,需要保证要<em>调试</em>的那部分代码没有输入输出操作。还有就是GDB7.0以上的版本的<em>调试</em>器才支持反向<em>调试</em>,这个功能目前不是很完美,不过正常的使
gdb调试的基本使用
https://www.cnblogs.com/HKUI/p/8955443.html GDB<em>调试</em> 启动<em>程序</em>准备<em>调试</em> GDB yourpram 或者 先输入GDB 然后输入 file yourpram 然后使用run或者r命令开始<em>程序</em>的<em>执行</em>,也可以使用 run parameter将参数传递给该<em>程序</em> 参数列表 命令 命令缩写
GDB笔记(二):条件断点、命令列表、监视点 | Lesca技术宅
GDB笔记(二):条件断点、命令列表、监视点 | Lesca技术宅 2012-12-08  WUCANADA  来源  阅 9930  转 14 转藏到我的图书馆微信 分享: GDB笔记(二):条件断点、命令列表、监视点 Posted by lesca on 2011/05/21 Leave a comment (0) Go to comments 条件断点 b...
命令行中使用gcc编译器和gdb调试
先在命令行中输入g++看看有没有反应,没有就百度一下如何添加。常见编译选项gcc test.c//编译为a.exe文件 gcc test.c -o test //编译为test.exe文件 gcc test.c -o test -Wall -ansi -pedantic //编译并检查错误(一般wall即可) gcc test.c -o test -lm //链接数学库(C++不用)还有<em>一些</em>编译选项
gdb 调试 if语句
b  main.c:174  if i==4     表示za
GDB调试中动态显示执行的代码
在GDB<em>调试</em>中, 大家都知道使用list命令来显示代码:例如:显示main.c中的main函数附近的代码: list main.c:main显示main函数附近的代码: list main显示main.c中的第2到20行的代码: list main.c:2,20显示第10到20行的代码: list 10, 20虽然list已经很方便了, 但还是不尽人意. 如果能够在运行的同时显示代码就好了, 答案...
VS点击调试卡住的问题解决方案
<em>本来</em>今天好好的,不知道弄到了什么,<em>调试</em>不了了,一点击立马卡住,就一直在那转,就在网上找了找解决方案,下面给大家列出来几种可能会卡住的问题已经解决方案 1:加载<em>调试</em>符号引起的卡住 解决方案: 在“选项”“<em>调试</em>”“符号”里,“符号文件(.pdb)位置”下取消勾选Microsoft符号服务器,在“对以下模块自动加载符号”下选仅指定的模块。确定后,问题解决。 2:...
gdb调试(1):单步执行和跟踪函数调用
转发自:http://songjinshan.com/akabook/zh/<em>gdb</em>.html#id1看下面的<em>程序</em>: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18#include &amp;lt;stdio.h&amp;gt; int add_range(int low, int high) { int i, sum; f...
程序遇到core的时候 使得程序继续执行的解决办法
最近有点懒了,好久没有更新博客了,今天来一发。 在代码开发过程中,我们经常会遇到<em>程序</em>core掉,这个<em>时候</em>正常的处理步骤是,我们保留<em>程序</em>的coredump,然后分析,进而找出<em>程序</em>的bug,fix it! 但是,如果你的<em>程序</em>是线上服务,而且只会有极少数的输入会导致<em>程序</em>core掉,而且你允许可以有少量错误发生,那么这<em>时候</em>,我们的一个直观想法是,有没有什么方法可以 <em>跳过</em>这些该死的极少数异常数据
pycharm如何在debug的时候动态执行python语句
在<em>调试</em>MATLAB的<em>时候</em>,这一点很容易实现,比如动态修改变量的值,在VS2017中<em>调试</em>python<em>程序</em>,这一点也很容易实现,但是我在pycharm里面找了半天,如下图: ...
C语言debug之gdb调试技巧
C语言debug之<em>gdb</em>的<em>调试</em>技巧。
gdb调试当前运行的程序
<em>为什么</em>使用<em>gdb</em><em>调试</em>正在运行的<em>程序</em>?      因为有<em>时候</em>bug很难复现、或者环境搭建起来比较困难,所以在出现bug的<em>时候</em>可以使用<em>gdb</em>的attach功能<em>调试</em>正在运行的GCC编译出来的<em>程序</em>,注意编译选项要加-g,否则没有符号表。 <em>调试</em>步骤?      1. 编译<em>时候</em>带-g选项。      2. 运行<em>程序</em>。      3. ps找到进程号。      4.
gdb调试--汇编指令处断点
GDB中断点使用都很简单,如果我们要断点在函数main开始,直接b main就行。    图1   如上图所示停留在断点1,main函数开始处。汇编看到是在第四条汇编指令,那前3条指令都做了些什么? 第一条指令是将rbp寄存器压栈,rbp寄存器保存的是栈帧的底部,这里是将调用main函数的函数(这里main是被调用函数)的栈帧底部压栈。 第二条汇编指令是将rsp寄存器的值存入rbp
比较全面的GDB调试命令
用GDB<em>调试</em><em>程序</em> GDB是一个强大的命令行<em>调试</em>工具。大家知道命令行的强大就是在于,其可以形成<em>执行</em>序 列,形成脚本。UNIX下的软件全是命令行的,这给<em>程序</em>开发提代供了极大的便利,命令行 软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可 以做出一个非常强大的功能。 于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成 更为
GDB调试和常见段错误
1.基本命令 1)进入GDB  #<em>gdb</em> test   test是要<em>调试</em>的<em>程序</em>,由gcc test.c -g -o test生成。进入后提示符变为(<em>gdb</em>) 。 2)查看源码  (<em>gdb</em>) l   源码会进行行号提示。   如果需要查看在其他文件中定义的函数,在l后加上函数名即可定位到这个函数的定义及查看附近的其他源码。或者:使用断点或单步运行,到某个函数处使用s进入
Linux程序编译+GDB调试
Ubuntu下编译第一个C<em>程序</em>的成功运行 对于每个新手来说,进入Ubuntu最想做的事莫过于在终端(Terminal)里运行自己的第一个C/C++<em>程序</em>”hello.c/hello.cpp”了。很多语言书籍都是默认搭载好运行环境的,而Ubuntu默认是不包含编辑器vim和编译器gcc。假设你和我一样,展现在自己眼前的是一台刚安装好的Ubuntu电脑,下面我们将来实现自己的第一个<em>程序</em>。1.准备工作1.
Ubuntu中gdb调试步骤
注意:在进行<em>gdb</em><em>调试</em>过程中该<em>调试</em>的代码不能删除,否则无法进行debug<em>调试</em>.编译代码时命令: gcc -g xx.c -o xx.out进入debug<em>调试</em>命令 <em>gdb</em> ./xx.out查看代码: list/l开始<em>调试</em>: start逐行<em>调试</em>: n进入函数<em>调试</em>: s查看变量数据 p 变量名 退出<em>调试</em>: q
gdb】- 单步执行和跟踪函数调用
操作环境:[root@localhost zhangsan]# cat /proc/version Linux version 2.6.32-696.el6.x86_64 (mockbuild@c1bm.rdu2.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) ) #1 SMP Tue Mar 21 19:29:0...
linux下c/c++程序gdb单步调试
linux下c/c++<em>程序</em><em>gdb</em>单步<em>调试</em> 步骤: 使用gcc(g++)对源<em>程序</em>进行编译生成可<em>执行</em>文件,编译时加上个-g选项,如gcc test.c -g -o aaa; 此时生成可<em>执行</em>文件aaa,输入命令<em>gdb</em> aaa; 此时进入<em>gdb</em>模式,输入l(小写字母l),查看源代码,找到需要进行<em>调试</em>的函数或者行号; 例如想要对200行开始进行<em>调试</em>,在200行加入断点,b 200; 运行代码,输入...
linux gdb的详细用法 运行与断点(一)
<em>gdb</em>是<em>调试</em><em>程序</em>,跟踪问题的一个非常好的手段,下面将详细的进行介绍它的具体用法 下面以<em>gdb</em>_test.c<em>程序</em>为例介绍 #include int func() { int p = 0; int q = 0; for(p = 0; p < 5; p++) { q++; printf("p = %d\n", p);
GDB改变程序执行
1、修改变量值:set var var_name=num;(最佳)print var_name=num;2、跳转<em>执行</em><em>gdb</em>提供了乱序<em>执行</em>的功能。 jump linespec linespec可以是文件的行号,也可以是+num这偏移的形式。 jump addr;jump不会改变当前<em>程序</em>栈中的内容,所以,当一个函数调到另一个函数时,当函数运行完返回进行出栈操作时,必然会发生错误。3、产生信号量si
sublime 编译调试c/c++程序
sublime 编译<em>调试</em>c/c++<em>程序</em>有<em>时候</em>只是想用c编写一个测试小<em>程序</em>,不想去开庞大的VS。现在很多文本编辑器都有强大的插件管理系统,可以轻松的配置一个c/c++编译环境。 但是能做到各方面都表现优异的编辑器只有emacs和sublime了。两款编辑器在某种意义上的设计哲学很类似,都是伪装成操作系统的编辑器。 在windows平台下两款编辑器都有比较好的表现,但是从使用方便程度来说,sublime
在linux下用gdb调试gcc编译的代码;以及反汇编的操作
编写出.c文件后(输入vim   *.c命令,进去编写,*为随意写) 输入下面命令(假如我编的叫test.c): gcc -g test.c -o test <em>gdb</em> test //进入<em>gdb</em><em>调试</em>界面 <em>gdb</em> -q test //去除软件信息进入<em>gdb</em> <em>gdb</em> -Wall test.c -o test     //显示全部警告信息 在<em>gdb</em>界面中的操作: start //开始<em>程序</em>
GDB 调试正在运行的程序
1. <em>执行</em>命令: ps aux, 获取该进程的PID 2,
C语言scanf语句输入跳过造成死循环的解决办法
现象描述:在编写C语言<em>程序</em>时,需要使用scanf<em>语句</em>从键盘上输入一个整型的数时,当错误的输入了字符时,scanf<em>语句</em>就好像不会<em>执行</em>,但从键盘输入其他数字又无法获取。 问题分析:当定义scanf<em>语句</em>接收整型数值时,它就会<em>跳过</em>所有的非数字的字符,专接收数字。当输入了字符时,字符就会留在缓冲区,只要缓冲区又字符,scnaf就会去读,一读发现不是数字,就会<em>跳过</em>,只有当输入缓冲区没有字符了才等待你去输入,...
Linux环境下使用GDB调试C程序
写这篇博客的目的是为了对<em>gdb</em>的常用命令做一个备忘,记录回顾下使用<em>gdb</em>的过程加深记忆。<em>gdb</em>是linux环境下一个非常著名的C语言<em>调试</em>工具,而且也非常的好用,对于解决C语言的各种bug非常拿手,对于c语言下常见的内存问题,可以说能非常快速的定位并解决问题。这篇博客首先通过介绍<em>gdb</em>的基本使用,后面补充<em>gdb</em>的各种使用命令,我还想列出<em>一些</em>典型的使用环境来做一个总结性的说明,不过这个就留到以后再补充吧。
GDB单步调试
主要参考 http://www.cppblog.com/baby-fly/archive/2011/12/16/121395.html http://blog.csdn.net/s1234567_89/article/details/7852392<em>gdb</em>是是GNU下面的一个<em>调试</em>器,<em>应该</em>可以配合不同的编译器使用。 如果配合gcc使用。做单步<em>调试</em><em>应该</em>按照如下步骤。 1. 首先需要用gcc对源文件
gdb调试不显示代码的原因
我们从一个最简单的C语言<em>程序</em>开始。源文件main.c在 用户目录<em>gdb</em>文件夹下。 florian@florian-pc:~/<em>gdb</em>$ cat main.c int main() {     return 0; }; 然后将源文件编译为main(需要<em>调试</em>选项-g),并将main.c移动到src/main.c下,然后对main进行<em>调试</em>。 f
调试陷入死循环程序的方法
概述 应用<em>程序</em>陷入死循环后,界面可能不会有任何输出,所有的业务也不通,不易定位。 陷入死循环的<em>程序</em>占用的cpu使用率较高,通常可以通过使用top命令看出来。 对于多线程的<em>程序</em>,需要耐心<em>调试</em>,本文给出笔者近期使用的方法。 <em>调试</em>步骤 测试<em>程序</em> 编写一个多线程进入死循环的测试<em>程序</em>,如下: #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;pthread...
[Linux-4] gdb调试带参数的程序
一般来说GDB主要<em>调试</em>的是C/C++的<em>程序</em>。要<em>调试</em>C/C++的<em>程序</em>,首先在编译时,我们必须要  把<em>调试</em>信息加到可<em>执行</em>文件中。使用编译 器(cc/gcc/g++)的 -g 参数可以做到这一点。如:  > cc -g hello.c -o hello  > g++ -g hello.cpp -o hello  如果没有-g,你将看不见<em>程序</em>的函数名、变量名,所代替的全是 运行时的内存地址
GDB调试命令以及GDB调试段错误
<em>gdb</em>的<em>调试</em>命令,C语言是:cc -g tst.c -o tst;C++是g++  -g -o (生成的文件) file.cpp linux  c++<em>调试</em><em>程序</em>命令:<em>gdb</em>  file 启动,罗列代码行数ist 1,break (行数),info break,run(r)<em>调试</em>运行,step(s)单步<em>调试</em>,查看变量 print(p) 变量名,查看堆栈式bt,继续<em>调试</em>continue(c) ,退出<em>程序</em>
gdb】- 段错误调试
如果<em>程序</em>运行时出现段错误,用<em>gdb</em>可以很容易定位到究竟是哪一行引发的段错误,例如这个小<em>程序</em>:段错误<em>调试</em>实例一:#include &amp;lt;stdio.h&amp;gt; int main(void) { int man = 0; scanf(&quot;%d&quot;, man); return 0; }[zhangsan@localhost study-c]$ gcc -g <em>gdb</em>4.c -o <em>gdb</em>4 [zhan...
gdb调试printf的设置
set print elements 4096 <em>gdb</em><em>调试</em>打印消息
gdb调试(线程和正在运行中的程序
用了好久的<em>gdb</em> 但对于多线程的<em>调试</em>自己还时存在<em>一些</em>问题,因此这次花点时间整理整理。 所有的<em>gdb</em><em>调试</em>文章 <em>gdb</em>是有一组命令辅助多线程<em>调试</em>的。 info threads 显示可<em>调试</em>的所有线程,<em>gdb</em> 会给每个线程分配一个ID 我们可以是使用这个ID来操作对应的线程。<em>调试</em>目标线程 thread ID <em>调试</em>指定ID的线程*代表被<em>调试</em>的 线程 set scheduler-locking 调...
gdb如何调试没有符号表(未加-g选项的编译)的程序
很多<em>时候</em>,发行版的<em>程序</em>在编译的<em>时候</em>都是没有加上-g这个选项的,那么若是想<em>调试</em>一个<em>程序</em>,<em>应该</em>怎么办呢? 在加了-g选项时,是可以通过行号、函数名等进行断点的设置的,但是没有符号表的情况下,那么怎么来进行<em>程序</em>的断点的设置并进行<em>调试</em>呢? 这就要用到反汇编然后再对地址进行断点的设置来进行<em>调试</em>,具体情况可参看以下例子的过程: test.c代码如下: #include #i
GDB调试器的简单使用(通过实例一步一步的说明该如何去调试
        Linux 包含了一个叫 <em>gdb</em> 的 GNU <em>调试</em><em>程序</em>. <em>gdb</em> 是一个用来<em>调试</em> C 和 C++ <em>程序</em>的强 力<em>调试</em>器. 它使你能在<em>程序</em>运行时观察<em>程序</em>的内部结构和内存的使用情况. 以下是 <em>gdb</em> 所提供的<em>一些</em>功能: 它使你能监视你<em>程序</em>中变量的值. 它使你能设置断点以使<em>程序</em>在指定的代码行上停止<em>执行</em>. 它使你能一行行的<em>执行</em>你的代码.         在命令行上键入 <em>gdb</em> 并按回车键就可以运行 <em>gdb</em> 了, 如果一切正常的话, <em>gdb</em> 将被启 动并且你将在屏幕上看到类似的内容: [lxiron@F
scanf()函数被跳过不运行的原因
       当你进行过了scanf函数后, 在第二次scanf函数时, 由于缓存区里依然存着第一次结束时送入的回车符,在第二次时没有读入就直接把回车符送入了,所以没有真正起到读入数据的作用.只要在合适的地方加入fflush(stdin)清空缓存区,再运行scanf时就可以了.#include#include #includechar judge(int try,int answer){
vscode调试嵌入式c程序
最近读一份只能运行在嵌入式平台上的三无代码,由于数据结构比较复杂,没办法只能<em>gdb</em>一步步跟着读,<em>gdb</em>一边list、一边print还得一边next,效率很低下。在ubuntu上用过vscode之后,就觉得用vscode调嵌入式c<em>程序</em><em>应该</em>不错,花了<em>一些</em>时间尝试了一下,果真不是很复杂。 原理上主要使用了<em>gdb</em>的远程<em>调试</em>,远程<em>gdb</em><em>调试</em>时,使用了<em>gdb</em>的mi(machine interface)接口,...
go语言程序-gdb调试问题
    以前经常用<em>gdb</em><em>调试</em>C/C++<em>程序</em>,当学习golang的<em>时候</em>,发现golang的<em>程序</em>也是支持<em>gdb</em><em>调试</em>的,然而还是遇到<em>一些</em>问题。比如说<em>调试</em>etcd<em>程序</em>就遇到如下问题: 【问题1】 info goroutines,提示找不到Undefined info command: &quot;goroutines&quot;.  Try &quot;help info&quot;. 解决方法:启动<em>gdb</em>后,运行目标<em>程序</em>之前(输入r之前)...
gdb调试脚本
<em>gdb</em>脚本在在线<em>调试</em>时很有用处,使业务流程不被中断的情况下产生需要的<em>调试</em>信息,在不需要人工干预的情况下通过set logging file FILENAME和set logging on来实现将<em>调试</em>信息输出到文件。我们直接查看log文件就可以得到我们需要的<em>调试</em>信息了。 <em>gdb</em><em>调试</em>脚本我知道的有两种,一种是直接写<em>gdb</em>命令,一种是python脚本。 <em>gdb</em>命令方式更直接且方便,但是支持的逻辑有限
arm-linux-gdbgdbserver调试交叉编译的程序
交叉编译<em>gdb</em><em>调试</em><em>程序</em>的思想:<em>gdb</em>server在arm端,arm-linux-<em>gdb</em>z
gdb - 暂停/恢复程序执行
GDB - 暂停/恢复<em>程序</em><em>执行</em>      在使用GDB<em>调试</em><em>程序</em>的<em>时候</em>,经常需要暂停<em>程序</em>,以查看<em>程序</em><em>执行</em>情况和上下文。GDB 提供了多种暂停<em>程序</em>的方式,包括 break point, watch point, catch point, signals 和 thread stop. 在此这些概念直接饮用,不作翻译。   1. 设置暂停点    # s
C实战:强大的程序调试工具GDB
C实战:强大的<em>程序</em><em>调试</em>工具GDB1.基本<em>调试</em>这里只列举最最常用的GDB命令。1.1 启动GDB<em>gdb</em> program:准备<em>调试</em><em>程序</em>。也可以直接进入<em>gdb</em>,再通过file命令加载。1.2 添加断点b function:为函数设置断点。b是break的缩写,除了函数名,还可以是地址、当前<em>执行</em>处的+/-偏移等。1.3 运行<em>程序</em>run args:开始运行<em>程序</em>,run后面可以加<em>程序</em>需要的参数,就像在命令行正常
VS调试技巧-汇编,逐语句,逐过程,跳出
开始<em>调试</em> 从“<em>调试</em>”菜单中选择“开始”、“逐<em>语句</em>”或“逐过程”。 - 或 - 在源窗口中,右击可<em>执行</em>代码中的某行,然后从快捷菜单中选择“运行到光标处”。 如果选择“启动”,则应用<em>程序</em>启动并一直运行到断点。可以在任何时刻中断<em>执行</em>,以检查值,修改变量,或检查<em>程序</em>状态。有关更多信息,请参见中断<em>执行</em>。 若选择了“逐<em>语句</em>”或“逐过程”,应用<em>程序</em>启动并<em>执行</em>,然
强连通分量及缩点tarjan算法解析
强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Time, DFN[N], Low[N]; DFN[i]表示 遍历到 i 点时是第几次dfs Low[u] 表示 以u点为父节点的 子树 能连接到 [栈中] 最上端的点   int
最简单的插件示例下载
最简单的一个插件机制的示例工程。通过动态加载dll完成插件工作。 相关下载链接:[url=//download.csdn.net/download/xuddk727/5975283?utm_source=bbsseo]//download.csdn.net/download/xuddk727/5975283?utm_source=bbsseo[/url]
资料收藏大师 V3.76 破解版下载
资料收藏大师 V3.76 破解版 可收藏文字,图片,网页 平时冲浪时看到好的网页,图片,源码等等,直接往悬浮框里一拉就可以保存,方便,快捷,不影响桌面 相关下载链接:[url=//download.csdn.net/download/xhpdzr/2021585?utm_source=bbsseo]//download.csdn.net/download/xhpdzr/2021585?utm_source=bbsseo[/url]
JSP基础教程[精].rar下载
相当不错的JSP入门教程,为压缩的PPT文件。12课时 相关下载链接:[url=//download.csdn.net/download/trojentale1/2125167?utm_source=bbsseo]//download.csdn.net/download/trojentale1/2125167?utm_source=bbsseo[/url]
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 我为什么要学习java 我为什么想学习大数据
我们是很有底线的