当前位置:首页 » 网页前端 » gdb脚本使用哪个命令加载
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

gdb脚本使用哪个命令加载

发布时间: 2022-02-27 04:15:27

Ⅰ gdb 的 l 命令

gcc test.c -o test -g

那个-g是告诉gcc把调试信息加进来的。 具体你可以man gcc看看。
-g:
Proce debugging information in the operating system's native format. GDB can work with this debugging information.

Ⅱ 通过批处理 进入gdb 然后怎么运行gdb代码

GDB是一个强大的命令行调试工具。虽然X Window提供了GDB的图形版DDD,但是我仍然更钟爱在命令行模式下使用GDB。大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。
于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能。而Windows下的图形软件基本上是各自为营,互相不能调用,很不利于各种软件的相互集成。在这里并不是要和Windows做个什么比较,所谓“寸有所长,尺有所短”,图形化工具还是有不如命令行的地方。

1 GDB概述
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。

一般来说,GDB主要帮忙你完成下面四个方面的功能:

1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、动态的改变你程序的执行环境。

从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。

一个调试示例
源程序:tst.c

代码:

1 #include
2
3 int func(int n)
4 {
5 int sum=0,i;
6 for(i=0; i
7 {
8 sum+=i;
9 }
10 return sum;
11 }
12
13
14 main()
15 {
16 int i;
17 long result = 0;
18 for(i=1; i<=100; i++)
19 {
20 result += i;
21 }
22
23 printf("result[1-100] = %d", result );
24 printf("result[1-250] = %d", func(250) );
25 }
编译生成执行文件:(Linux下)
root@linux:/home/benben/test# gcc -g tst.c -o tst
使用GDB调试:

代码:

root@linux:/home/benben/test# gdb tst <---------- 启动GDB

GNU gdb 5.1.1

Copyright 2002 Free Software Foundation, Inc.

GDB is free software, covered by the GNU General Public License, and you are

welcome to change it and/or distribute copies of it under certain conditions.

Type "show ing" to see the conditions.

There is absolutely no warranty for GDB. Type "show warranty" for details.

This GDB was configured as "i386-suse-linux"...

(gdb) l <-------------------- l命令相当于list,从第一行开始例出原码。

Ⅲ gdb调试命令是什么

1、对于在应用程序中加入参数进行调试的方法:

直接用 gdb app -p1 -p2 这样进行调试是不行的。

需要像以下这样使用:

#gdb app

(gdb) r -p1 -p2

或者在运行run命令前使用set args命令:

(gdb) set args p1 p2

可以用show args 命令来查看

2、加入断点:

break <linenumber>

break <funcName>

break +offset

break -offset

(在当前行号的前面或后面的offset行停住。)

break filename:linenum

在源文件filename的linenum行处停住。

break filename:function

在源文件filename的function函数的入口处停住。

(3)gdb脚本使用哪个命令加载扩展阅读:

一般来说,GDB主要帮助完成下面四个方面的功能:

1、启动程序,可以按照你的自定义的要求随心所欲的运行程序。

2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)

3、当程序被停住时,可以检查此时你的程序中所发生的事。

4、可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。

Ⅳ 怎样用gdb调试一个由脚本文件启动的程序

我用makefile写了个编译程序,因为makefile自动搜索源文件路径,所以在写这个makefile文件时,我的每个源文件 只有文件名,而没附带路径名,说白了,我编译完成后,我的.h 文件在 /SE/include中,.cpp文件在 /SE/src中, .o文件和 可执行文件在/...

Ⅳ gcc中怎么使用gdb命令

在linux系统中,默认是没有安装gcc编译器的,可以通过命令
rpm -q | grep gcc

来查看。安装命令为:
yum -y install gcc

安装后,编写一个.c结尾的文件。
gcc test.c

就会默认输出一个a.out的输出文件,这个输出文件就是可执行文件。
如果加上-o选项,则可以自定目标文件。
gcc -o test test.c

test就是它的可执行文件。
一般都默认加上-Wall 选项,可以自动提示一些出错警告的信息。
gcc -Wall -o test test.c

gbd
以上就是常用的gcc相关知识了。下面就是它的调试,调试通常使用gdb。在编译的时候需要加上选项-ggdb3选项
gcc -ggdb3 -Wall -o test test.c

这样在没有出错的情况下
gdb test

就进入调试窗口
输入下面命令可以进行如下的操作:
break 设置断点
break 21 在第21行设置断点
break main 在main函数处设置断点
break test 在函数test处设置断点
step / s 下一步,直接执行下一条程序
continue / cont 下一段,如果遇到函数,不会进入函数,逐过程,有点类似VS里面的F10
run 运行
finish 结束调试
tbreak设置临时断点
print / p 显示某个变量的值
p *array@len 输出数组
p i 输出i的值
enable 恢复失效的断点
disable 使断点失效
clear 清除断点
backtrace / bt 查看堆栈信息
相关的输出格式
x 十六进制格式
d 十进制格式
u 十六进制无符号
o 八进制显示
t 二进制显示
a 十六进制显示
c 字符格式显示
f 浮点数格式显示

Ⅵ 怎样用GDB调试一个由脚本文件启动的程序

使用GDB
一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点。如:
$gcc -g -Wall hello.c -o hello
$g++ -g -Wall hello.cpp -o hello
如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。当你用-g把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用gdb来调试他。
启动GDB的方法有以下几种:
gdb <program>
program也就是你的执行文件,一般在当前目录下。
gdb <program> core
用gdb同时调试一个运行程序和core文件,core是程序非法执行后core mp后产生的文件。
gdb <program> <PID>
如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。
以上三种都是进入gdb环境和加载被调试程序同时进行的。也可以先进入gdb环境,在加载被调试程序,方法如下:
*在终端输入:gdb
*在gdb环境中:file <program>
这两步等价于:gdb <program>
GDB启动时,可以加上一些GDB的启动开关,详细的开关可以用gdb -help查看。我在下面只例举一些比较常用的参数:
-symbols <file>
-s <file>
从指定文件中读取符号表。
-se file
从指定文件中读取符号表信息,并把他用在可执行文件中。
-core <file>
-c <file>
调试时core mp的core文件。
-directory <directory>
-d <directory>
加入一个源文件的搜索路径。默认搜索路径是环境变量中PATH所定义的路径。

Ⅶ .gdb是什么格式用啥软件可以打开

.gdb格式的文件是GPS定位仪器所采集是定位数据通过仪器自动保存的文件,可利用MapSourse及GoogleEarth等软件打开此文件,显示的是定位数据。

变化:

1、GDB可以理解线程的名字。

2、这个命令”线程名称”(指定一个名称)和“线程找到[REGEXP]”(匹配名称、目标ID,或者额外的信息)被添加。

3、Python脚本支持大大增强。

4、在c++的支持,异常处理是提高,模板参数放在范围在一个实例化时调试。

5、线程调试的核心转储在GNU / Linux成为可能。

(7)gdb脚本使用哪个命令加载扩展阅读:

执行程序:

要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<;和>;)和shell通配符(*、?、[、])在内。

如果使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。利用set args 命令就可以修改发送给程序的参数,而使用show args 命令就可以查看其缺省参数的列表。

(gdb) file a.out //加载被调试的可执行程序文件。

(gdb)set args –b –x

(gdb) show args

(gdb)r //执行程序

backtrace命令为堆栈提供向后跟踪功能。Backtrace 命令产生一张列表,包含着从最近的过程开始的所有有效过程和调用这些过程的参数。

Ⅷ 初步接触linux,请问gdb调试start后加载动态库符号时间很长,怎么解决,可以不加载指定库符号吗

方法一、在/etc/ld.so.conf文件中添加路径,vi /etc/ld.so.conf
添加下边内容

123

include ld.so.conf.d/*.conf /usr/cluster/.share/lib

方法二、在终端输入:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/cluster/.share/lib
方法三、修改/etc/profile文件

123

export MPI_HOME=/usr/cluster export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MPI_HOME/.share/lib

在终端执行source /etc/profile 使配置文件生效
程序运行时加载动态库失败的解决方法
错误提示如下:
error while loading shared libraries: libjson.so.0: cannot open shared object file: No such file or directory
原因一般有两个,一个是操作系统中没有包含该共享库(lib*.so.* 文件)或者共享库版本不对。解决办法就是重新下载安装。
另外一个原因就是已经安装了该共享库,但是执行需要调用该共享库的程序的时候,程序按照默认共享库路径找不到该共享库文件。解决方法如下:
如果共享库文件安装到了 /lib 或 /usr/lib 目录下,那么执行一下 ldconfig 命令。
ldconfig命令的用途, 主要是在默认搜寻目录(b和/usrb)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表.
如果共享库文件安装到了 /usr/local/lib (一般开源的共享库都会安装到该目录下)或者其它非 /lib 或 /usr/lib 目录下,那么在执行 ldconfig 命令前,还要把新的共享库目录加入到共享库配置文件 /etc/ld.so.conf 中,如下:

1234

# cat /etc/ld.so.confinclude ld.so.conf.d/*.conf# echo "/usr/local/lib" >> /etc/ld.so.conf# ldconfig

或者在 /etc/ld.so.conf.d/ 目录下新建任何以 .conf 为后缀的文件,在该文件中加入库文件所在的目录。然后执行 ldconfig 更新 /etc/ld.so.cache 文件。
如果共享库文件安装到了其他非 /lib 或 /usr/lib 目录下,但是又不想在 /etc/ld.so.conf 文件中加共享库路径(或者是没有权限加路径)。那可以 export 一个全局变量 LD_LIBRARY_PATH,然后运行程序的时候就会去找个目录中找共享库。
LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开. 比如安装了一个mysql到/usr/local/mysql目录下, 其中有一大堆库文件在/usr/local/mysql/lib下面, 则可以在.bashrc或.bash_profile或shell里加入以下语句即可:
export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH
一般来讲这只是一种临时的解决方案, 在没有权限或临时需要的时候使用.
如果程序需要的库文件比系统目前存在的库文件版本低,可以做一个链接。比如:

12345

error while loading shared libraries: libncurses.so.4: cannot open sharedobject file: No such file or directoryls /usr/lib/libncu*/usr/lib/libncurses.a /usr/lib/libncurses.so.5/usr/lib/libncurses.so /usr/lib/libncurses.so.5.3

可见虽然没有libncurses.so.4,但有libncurses.so.5,是可以向下兼容的
建一个链接就好了

1

ln -s /usr/lib/libncurses.so.5.3 /usr/lib/libncurses.so.4

Ⅸ gdb 怎么加载源文件调试

gdb 怎么加载源文件调试
1: 对于在应用程序中加入参数进行调试的方法:
直接用 gdb app -p1 -p2 这样进行调试是不行的。
需要像以下这样使用:
#gdb app
(gdb) r -p1 -p2
或者在运行run命令前使用set args命令:
(gdb) set args p1 p2
可以用show args 命令来查看

2. 加入断点:
break <linenumber>
break <funcName>
break +offset
break -offset
(在当前行号的前面或后面的offset行停住。)

break filename:linenum
在源文件filename的linenum行处停住。

break filename:function
在源文件filename的function函数的入口处停住。

Ⅹ 如何写gdb命令脚本

GDB是一个强大的命令行调试工具。虽然X Window提供了GDB的图形版DDD,但是我仍然更钟爱在命令行模式下使用GDB。大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。
于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能。而Windows下的图形软件基本上是各自为营,互相不能调用,很不利于各种软件的相互集成。在这里并不是要和Windows做个什么比较,所谓“寸有所长,尺有所短”,图形化工具还是有不如命令行的地方。

1 GDB概述
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。

一般来说,GDB主要帮忙你完成下面四个方面的功能:

1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、动态的改变你程序的执行环境。