gdb调试

摘要:
在gdb调试之前,必须要把调试信息加到可执行文件中。gdbcore用gdb同时调试一个运行程序和core文件,core是程序非法执行后coredump后产生的文件。gdb-p通过top得到要调试程序的pid,然后进行调试。参数GDB启动时,可以加上一些GDB的启动开关,详细的开关可以用gdb-help查看。当以gdb方式启动gdb后,gdb会在PATH路径和当前目录中搜索的源文件。如要确认gdb是否读到源文件,可使用l或list命令,看看gdb是否能列出源代码。

前期准备

  • 一般来说GDB主要调试的是C/C++的程序。在gdb调试之前,必须要把调试信息加到可执行文件中。使用编译 器(cc/gcc/g++)的 -g 参数可以做到这一点。如:
gcc -g hello.c -o hello 
g++ -g hello.cpp -o hello 
  • 如果没有-g,将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。

启动 gdb 有三种方式:

  • gdb
    program是可执行程序。
  • gdb core
    用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。
  • gdb -p
    通过top得到要调试程序的pid,然后进行调试。

参数

GDB启动时,可以加上一些GDB的启动开关,详细的开关可以用gdb -help查看。常用的参数:

-symbols <file> 
-s <file> 
从指定文件中读取符号表。 

-se file 
从指定文件中读取符号表信息,并把他用在可执行文件中。 

-core <file> 
-c <file> 
调试时core dump的core文件。 

-directory <directory> 
-d <directory> 
加入一个源文件的搜索路径。默认搜索路径是环境变量中PATH所定义的路径。

当以gdb 方式启动gdb后,gdb会在PATH路径和当前目录中搜索的源文件 。 如要确认gdb是否读到源文件,可使用l或list命令,看看gdb是否能列出源代码。

运行时。可以设置下面四方面的事。

  • 程序运行参数。
    set args 可指定运行时参数(也可以指定配置文件)。(如:set args 10 20 30 40 50)
    show args 命令可以查看设置好的运行参数。
  • 运行环境。
    path 可设定程序的运行路径。
    show paths 查看程序的运行路径。
    set environment varname [=value] 设置环境变量。如:set env USER=hchen
    show environment [varname] 查看环境变量。
  • 工作目录。
    cd 相当于shell的cd命令。
    pwd 显示当前的所在目录。
  • 程序的输入输出。
    info terminal 显示你程序用到的终端的模式。
    使用重定向控制程序输出。如:run > outfile
    tty命令可以指写输入输出的终端设备。如:tty /dev/ttyb

具体来说就是
例如一个程序名为prog 参数为 -l a -C abc
则,运行

gcc/g++ -g  prog.c/cpp -o prog

就可以用gdb调试程序prog

gdb prog

进入gdb调试界面
输入参数命令set args 后面加上程序所要用的参数,注意,不再带有程序名,直接加参数,如:

set args -l a -C abc

回车后输入
r
即可开始

免责声明:文章转载自《gdb调试》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇查看端口占用情况宝宝名字下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ASP.NET Core MVC中Hangfire及EF Core的简单使用

项目中可能要实现定时读写数据,所以了解了一下Hangfire,并简单尝试使用,同时又实践了一波EF Core的DB First模式 Hangfire 1.新建ASP.NET Core项目 2.Nuget安装Hangfire的包,因为我Hangfire配置用数据库使用的PostgreSql,所以添加的pg相关的引用,Hangfire官方支持SQL Serve...

前端chrome浏览器调试总结

一、调试工具 1、Elements 先来看这张图最上头的一行是一个功能菜单,每一个菜单都有它相应的功能和使用方法,依次从左往右来看箭头按钮:用于在页面选择一个元素来审查和查看它的相关信息,当我们在Elements这个按钮页面下点击某个Dom元素时,箭头按钮会变成选择状态 设备图标:点击它可以切换到不同的终端进行开发模式,移动端和pc端的一个切换,可以选择不...

部署基于.netcore5.0的ABP框架后台Api服务端,以及使用Nginx部署Vue+Element前端应用

前面介绍了很多关于ABP框架的后台Web API 服务端,以及基于Vue+Element前端应用,本篇针对两者的联合部署,以及对部署中遇到的问题进行处理。ABP框架的后端是基于.net core5.0 的Asp.net core 应用,因此和常规的Asp.net core 应用部署一样;而Vue+Element前端应用则是基于nodejs的应用,部署方式又...

VS调试异常问题解决(一)

一、无法在web服务器上启动调试,您没有调试web服务器进程的权限 具体:无法在web服务器上启动调试,您没有调试web服务器进程的权限,您需要以web服务器的用户账户身份运行,或者具有管理员权限。 现象:手动修改网站项目的启动端口号,调试报错 原因:从Windows NT 6.1开始,既Windows Vista版本开始,增强了用户控制,尤其是Wind...

调试JDK源码时可编辑操作的实现

目录 一、解压源码压缩包 二、创建Java项目 三、复制源码文件到文件夹 四、Platform Settings中新增一个SDK 五、修改新建SDK的 Sourcepath 配置 六、修改 Project 以及 Modules 的 SDK 七、项目结构图 八、测试调试过程中对源码进入注释 以下操作在以下环境中测试通过:idea 2019.3,jd...

zz-rtl8188eu的linux-usb-wifi调试及驱动编译150210

//zz//#######################################################################zz-rtl8188eu的linux-usb-wifi调试及驱动编译150210zz-Write:@2015-2-4 22:11:14@2015-2-11 00:32:07@REF:嵌入式linux us...