运行环境c语言gdb和lldb,一、C语言调试—— gdb 的使用

1.1 gdb 调试工具常用命令

list:展开调试的源代码,缩写 l;

break:设置断点,缩写为 b;

info break:查看断点信息,缩写为 i b

delete:删除断点

print:打印变量的值,缩写为 p;

run:程序开始运行,缩写 r,在 r 后可以加入程序启动启动参数,程序运行到断点处暂停;

step:单步调试,可以进入子函数,缩写为 s;

next:单步调试,不进入子函数,缩写为 n;

continue:程序继续运行,,到下一断点处暂停,缩写为 c;

set args:设置运行参数

show args:查看运行参数

gdb attatch pid:加载运行中的进程进行调式

dir dirname ... :指定源目录

x/28hx ---:以十六进程输出内存块数据

kill:停止调试

段错误调试:

通过 ulimit 命令查看一下系统是否配置支持了 dump core 的功能。通过 ulimit -c 或 ulimit -a,可以查看 core file 大小的配置的情况,如果为 0,则表示系统关闭了 dump core;可以通过 ulimit -c unlimited 来打开。若发生了段错误,但没有 core dump,是由于系统禁止  core 文件的生成。

gdb [exec file] [core file] | gdb -c corefile execfile

backtrace:查看堆栈信息,缩写为 bt,注意 run 到出错的地方后,运行此命令,可以查看到错误的地方

frame 堆栈错误编号:切换到编号处堆栈

之后用 gdb 的通用调试命令查看参数等

1.2 例子

swap.c

#include

void swap(int *a, int *b);

void swap_error(int a, int b);

int main(void)

{

int i = ;

int j = ;

printf("i: %d, j: %d\n", i, j);

swap(&i, &j);

printf("i: %d, j: %d\n", i, j);

return ;

}

void swap(int *a, int *b)

{

int c = *a;

*a = *b;

*b = c;

}

void swap_error(int a, int b)

{

int c = a;

a = b;

b = c;

}

编译出目标文件(.o 文件): gcc -c -g -Wall swap.c

编译出可执行文件:gcc -g -o app swap.o

运行:gdb app

运行 list 命令可以列出源码:

73c962f3d47092d77956d1d09a76f78a.png

list 后可以加函数名,列出函数,如 list main、list swap

设置断点, break main(或者使用 break swap.c:main(或行号)) 和列出断点信息 info break,也可以通过 b 行号 设置断点

a92de61c5b7306d2e5aa60100b7d8165.png

运行程序,run(r) 命令:

b216a0389d3faccf9686870e00f27449.png

运行到下一行,next(n)命令:

fc0ef37e352dad816e12f3866350d913.png

打印 i 的值,print(p) i:

fdf01368292a79e13a5f45ff0cc10e7c.png

打印 i 的地址,p &i:

c3ef62ab10d836e8761c7840b6d4f33c.png

进入子函数,step(s)命令:

04300892811b3a6fb327cece397c25a3.png

打印 a:

08eb012b828b7aa75dcd4ccdde035172.png

a 的值与 i 的地址一样,即 a = &i

删除断点,delete 断点标号:

12e0b6bcc3eb1c00dbed3fd77da9a5c7.png

GDAL库调试(包括跨语言调试)

很多时候都需要调试GDAL库,尤其是像学习GDAL库中的某些算法是如何实现的时候,调试就必不可少了. 首先说明用C++的调试.以VS2008为例进行说明. 编译DEBUG版本的GDAL库,这个可以参考 ...

linux-c 调试 gdb

GDB(GNU Debugger) gcc -g –o testarg testarg.c //可执行文件中带上调试信息,用于后续的gdb调试 gdb testarg l; list //显示源程序 ...

Linux下C语言的调试 - gdb

调试是每个程序员都会面临的问题. 如何提高程序员的调试效率, 更好更快地定位程序中的问题从而加快程序开发的进度, 是大家共同面对的问题. 可能Windows用户顺口就会说出:用VC呗 :-) , 它提 ...

c语言之gdb调试。

1.此文档演示如何使用gdb调试c语言代码. 代码如下: #include /*函数声明*/ void digui(int n); int main() { ; dig ...

C语言调试器GDB和LLDB的使用方法

调试器的使用 编译输出带调试信息的程序 调试信息包含:指令地址.对应源代码及行号 指令完成后,回调 LINUX使用GDB MAX使用LLDB 使用说明 // 开始调试testlib程序 lldb te ...

c语言,gdb

Get gdb call stack http://blog.csdn.net/zoufeiyy/article/details/1490241 Debugging with GDB - Examin ...

linux下的C语言开发 GDB的例子

在很多人的眼里,C语言和linux常常是分不开的.这其中的原因很多,其中最重要的一部分我认为是linux本身就是C语言的杰出作品.当然,linux操作系统本身对C语言的支持也是相当到位的.作为一个真正 ...

C 调试 gdb常用命令

gdb常用命令: [root@redhat home]#gdb 调试文件:启动gdb (gdb) l :(字母l)从第一行开始列出源码 (gdb) break n :在第n行处设置断点 (gdb) b ...

C语言调试过程中duplicate symbol错误分析

说明:在我们调试C语言的过程中,经常会遇到duplicate symbol错误(在Mac平台下利用Xcode集成开发环境).如下图: 一.简单分析一下C语言程序的开发步骤. 由上图我们可以看出C语言由 ...

随机推荐

paper 28 :一些常见常用数据库的下载网站集锦

做图像处理+模式识别的童鞋怎么可以没有数据库呢? 但是,如果自己做一个数据库,费时费力费钱先不说,关键是建立的数据库的公信力一般不会高,做出的算法也别人也不好比较,所以呢,下载比较权威的公共数据库还是 ...

windows下如何github ssh 公钥

windows下如何github ssh 公钥   1. 安装git,从程序目录打开 "Git Bash"  2. 键入命令:ssh-keygen -t rsa -C " ...

[转:CSS3-前端] CSS3发光和多种图片处理

原文链接:http://www.qianduan.net/css3-image-styles.html 一些上流的CSS3图片样式 神飞 发表于 24. Sep, 2011, 分类: CSS , 46 ...

C语言之固定格式输出当前时间

固定格式输出当前时间 编程实现将当前时间用以下形式输出:星期  月  日   小时:分:秒   年 代码如下: #include#include

全文搜索 Contains 与like 的区别

全文搜索:是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式. ...

Javascript判断数据类型与真假值隐形转换研究

一.引言 我们在开发的时候经常要判断真和假,这是我们经常写的代码: if(a){ alert(1) } 那我们怎么判定a是真还是假呢?下面这些值的真假又是多少呢?它们的数据类型又是怎样的呢? &quo ...

js中sum(2,3,4)和sum(2)(3)(4)都返回9并要求扩展性

网上有很多关于sum(1)(2)(3),sum(1,2,3)之类的面试题要求输出相同的结果6并要求可以满足扩展,即有多个参数时也能符合题设的要求,所以自己写了部分例子可以大概满足这些面试题的要求 &l ...

[SDOI2011]计算器

Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给 ...

120. Triangle(中等)

Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...

JavaException的使用

(第一个文件 MyException.java) package exception;import java.io.*; //先创建自己的异常类继承与Exception的类 public class ...

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值