程序调试手段之gdb, vxworks shell】的更多相关文章

调试一个程序主要用到的功能: 启动程序 设置函数断点 设置数据断点 单步执行 查看内存值 修改内存值 linux下的gdb,和vxworks下的shell 虽然使用方式和调试命令略有不同,但是都能满足上述程序调试的基本功能.为了更好的理解和记忆,下面给出两者的差异点. 表1 功能 vxworks shell linux gdb 说明 启动程序 sp ts tr c start run finish c   设置函数断点 b bd bd all b <line/num/fun> delete b…
本文将用一个实际例子讲解如何通过GDB进行程序调试. 首先,我们需要理解的是GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,其产生和调试的目的是让调试者知道,程序在执行时内部发生了什么,或者运行过程中在做什么,一般来说,GDB主要帮助实现以下四个方面的功能. 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序.    2.可让被调试的程序在你所指定的调置的断点处停住.(断点可以是条件表达式)    3.当程序被停住时,可以检查此时你的程序中所发生的事.    4.动态的…
用了好久的GCC/G++ 却一直都没用过GDB调试过程序,有时程序不是非常大,一般有错,直接看编译器编译结果就几乎相同知道错在哪儿了,或者使用codeblocks单步调试,甚至回到windows以下调试,可是总是不太方便,因此有必要看一下GDB调试方法和基本步骤. 以下是一个简单的演示: 首先创建一个有错误的代码,例如以下: 这个程序非常easy,目的是接受用户的输入,并将用户的输入回应输出来. 可是这个程序的第17行有个错误,使用了未初始化的字符指针name,因此编译执行后会出现段错误,例如以…
锁定线程 set scheduler-locking 1.要使用此命令,先用gcc -g编译程序,如:  $gcc -g test.c -o test  编译test.c源程序,输入此程序的调试版本test 2.调试程序  $gdb test //调试可执行程序test  $(gdb)start //使用程序test开始运行    列出指定函数的源代码,或列出指定行号开始的源程序  $(gdb)list 函数名  $(gdb)list 行号    backtrace(或bt) 查看各级函数调用及…
对于厌烦了的 print 和 echo,可以尝试点新鲜省力的小手段. 1. 使用 shell 的执行选项 sh 和 bash 常用的执行指令有:-n.-x.-c.-v. 其中: -n 是 noexec 的简写,作用是只做脚本的语法检查,而不执行脚本. -x 是 xtrace 的简写,作用是在每一行代码执行之前,将代码本身打印到标准输出(代码前添加一个 “+” 用来区别).这个在调试的时候尤其有用. -c 是 command string 的缩写,使用该选项从字符串而不是文件读取脚本.比如,sh…
3. GDB的实现 GDB是GNU发布的一个强大的程序调试工具,用以调试C/C++程序.可以使程序员在程序运行的时候观察程序在内存/寄存器中的使用情况.它的实现也是基于ptrace系统调用来完成的. 其原理是利用ptrace系统调用,在被调试程序和gdb之间建立跟踪关系.然后所有发送给被调试程序的信号(除SIGKILL)都会被gdb截 获,gdb根据截获的信号,查看被调试程序相应的内存地址,并控制被调试的程序继续运行.GDB常用的使用方法有断点设置和单步跟踪,接下来我们来分析一 下他们是如何实现…
GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具.一般来说GDB主要完成下面四个部分的功能. 1)启动你的程序,可以按照你的自定义的要求运行程序. 2)可让被调试程序在你所指定的调试的断点处停住(断点可以使条件表达式). 3)当程序被停住时.可以检查此时你的程序中所发生的事,包括查看当前状态下程序中指定变量的值. 4)动态的改变你程序的执行环境. 步骤: 1.先使用vi编辑器编辑文件test.c,用于GDB调试器调试. 2.使用命令gcc -g test.c -o test,编译…
Linux Shell 程序调试 Shell程序的调试是通过运行程序时加入相关调试选项或在脚本程序中加入相关语句,让shell程序在执行过程中显示出一些可供参考的“调试信息”.当然,用户也可以在shell程序中的适当位置加入一些echo命令用于调试与跟踪.   方法一:在运行脚本程序时加入调试选项: [用法]bash –选项 ./shellScript.sh 几个常用的调试选择项如下:         -e :如果一个命令返回一个非0退出状态值(失败),就退出.         -n : 不需要…
查看栈信息 当程序被停住了,首先要确认的就是程序是在哪儿被断住的.这个一般是通过查看调用栈信息来看的.在gdb中,查看调用栈的命令是backtrace,可以简写为bt. (gdb) bt    #0 pop () at stack.c:10    #1 0x080484a6 in main () at main.c:12 也可以通过info stack命令实现类似的功能(我更喜欢这个命令): (gdb) info stack    #0 pop () at stack.c:10    #1 0x…
arm-linux-gdb+gdbserver环境搭建以及远程调试 GDB+GdbServer: ARM程序调试 嵌入式arm linux环境中gdb+gdbserver调试 建立交叉调试环境 编译过程中碰到的问题: 嵌入式 编译gdb源码时出现“set but not used [-Werror=unused-but-set-variable]”问题的解决办 gdbserver: linux-x86-low.c error: sys/reg.h: No such file or directo…