
编程辅助工具
文章平均质量分 80
食梦少年
仰望大牛,脚踏实地
展开
-
binutils——GCC的辅助工具集
什么是开发环境?构建环境调试环境测试环境Binutils工具集工具名 功能简介什么是开发环境?构建环境编写代码,程序编译,版本控制(可选)版本控制多数在公司中使用,个人开发我们常常使用备份的方式来保存之前的版本。常用版本控制有:SVN、Git等。调试环境用于定位问题的辅助工具集当我们编写完程序后,经常会出现各种各样...原创 2018-06-12 19:50:03 · 1579 阅读 · 0 评论 -
GDB——使用GDB查看栈帧信息
当我们阅读代码和查找BUG时,往往有一个烦恼。就是我们不知道函数的调用顺序。而这些函数调用顺序对应我们理解程序结构,程序运行过程是很有帮助的。 那么问题是:程序的调用过程往往是很复杂的,而且可能是多层嵌套,跨文件调用的。这时候如果靠人工去查找,这将是一件非常大工作量的事情。GDB中有办法帮助我们做到查看函数调用的过程吗?首先我们需要知道,函数调用信息存放在哪?只有知道函数调用信息,我...原创 2018-06-13 17:02:01 · 37523 阅读 · 1 评论 -
GDB——使用GDB查看内存
我们可以使用GDB来进行对指定内存地址进行查看。命令语法: x /Nuf experssion - N – 需要打印的单元数 - u – 每个单元的大小 u对应的意义:f – 数据打印的格式 f对应的意义:查看指定内存的作用这样查看指定内存数据有什么作用呢?为什么不直接用变量名呢? 实际上,直接使用变量名打印出的值,默认打印为变量类型的数值。不能自由选择打印的...原创 2018-06-13 17:00:07 · 8361 阅读 · 0 评论 -
GDB——使用GDB实时监控变量
示例代码:#include <stdio.h>#include <pthread.h>#include <unistd.h>int g_var = 0;void* thread_func(void* args){ sleep(5); g_var = 1;}int main(){ int i = 0; p...原创 2018-06-13 16:58:20 · 17395 阅读 · 0 评论 -
GDB——使用GDB验证代码的正确性
在软件开发中,不可避免的会产生BUG。这样我们就需要频繁的查找问题,修改代码,验证代码正确性。这样就需要我们不断的修改代码,编译代码。这样的话就白白浪费了需要时间。GDB为我们提供了解决方案,我们可以实时修改有问题的代码,验证一下代码是否正确,再修改源代码。示例过程:(gdb) startTemporary breakpoint 5 at 0x8048498: file test.c...原创 2018-06-13 16:57:32 · 380 阅读 · 0 评论 -
GDB——使用GDB动态链接到进程
GDB支持链接到一个正在运行的进程。一遍检测它的运行状态。示例过程:Bakuman@Shaw-vm:~$ su密码: root@Shaw-vm:/home/delphi# cd workspace/root@Shaw-vm:/home/delphi/workspace# lsClearRTOS embedded func.c test.c test.outroot@S...原创 2018-06-13 16:56:06 · 1352 阅读 · 0 评论 -
GDB——GDB的断点调试
那么我们应该如何使用GDB呢?GDB为我们提供了什么样的功能呢?我们可以参照图形界面调试器的基本功能,使用GDB来实现。例如: 问题:我们如何使用GDB设置断点,删除断点的操作? - 通过函数名设置断点 1. break func_name [ if var = value ] 2. tbreak func_name [ if var = value ] - 通过文...原创 2018-06-13 16:54:52 · 9726 阅读 · 0 评论 -
GDB——GDB调试工具简介
什么是GDB?GDB的常规应用GDB的启动方式什么是GDB?GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。与Window下的IDE不同,GDB是纯命令行执行的,并没有图形界面方法。 问题:既然windows下有对用户友好的图形界面的调试工具了。那么为什么我们还需要回到命令行的模式呢? 如果我们是在UNIX平台下做软件,我们会发现基本...原创 2018-06-12 19:58:05 · 4953 阅读 · 0 评论 -
binutils——如何找到内存中的内存错误
addr2lineAddr2line示例:定位0地址访问1.开启core dump选项2.运行程序,并生成崩溃的core文件3.读取core文件,获取IP寄存器的值4.使用addr2line定位代码行strip 问题:我工程项目中,经常会出现内存操作错误这样的BUG。而这种BUG往往是很难发现的,因为编译器发现不了这样的错误,并且发生错误的地方和导致错...原创 2018-06-12 19:56:28 · 660 阅读 · 0 评论 -
binutils——如何将程序打包为库文件
静态库文件动态库文件静态库与动态库的区别在我们开发项目过程中。经常会遇到使用第三方程序的情况。而这个时候我们只需要调用第三方提供的库文件和接口文档就可以了,我们并看不到源代码。而这个库文件又是许多源文件编译得来的。 问题:我们如何将多个源文件打包成一个库文件呢?静态库文件由链接器在链接时将库的内容直接加入到可执行程序中。Linux下静态库的创建和...原创 2018-06-12 19:55:13 · 1213 阅读 · 0 评论 -
binutils——查看可执行文件中包含的信息
nm段标识符说明:sizestringsobjdumpobjdump–h 的输出说明有时候我们知道我们编译出来的可执行文件中包含了什么。方便我们查找问题。但是可执行文件又不可以直接打开。 那么我们可以使用什么工具来查看可执行文件包含的信息呢?nm列出目标文件中的标识符(变量名,函数名)输出结果由三部分组成:{ 地址, 段, 标识符...原创 2018-06-12 19:53:31 · 1665 阅读 · 0 评论 -
GDB——GDB中一些调试中的小技巧
除了之前介绍的一些常用用法,GDB还有许多其他的功能,也是方便我们使用的。技巧示例:断点处自动打印(gdb) startTemporary breakpoint 1 at 0x804846f: file tricks.c, line 33.Starting program: /home/delphi/workspace/main.out Temporary breakpoint...原创 2018-06-13 17:03:32 · 633 阅读 · 0 评论