陌上花开缓缓归以
无
展开
-
linux i2c-tools使用总结
5,i2c detect -y iic-num(iic-num为上面的iic-bus序列号)1,安装ic-tools。2,查看有几条iic总线。4,iic-help命令。原创 2024-03-27 11:26:00 · 90 阅读 · 0 评论 -
重启原因总结
3,系统重启过程中我们需要对芯片做什么处理,不同情况下对芯片是否做相同的处理呢。(4)power reboot(电源重启(掉电重启))(3)watchdog reboot(看门狗重启)(1)cold reboot (冷重启)(2)warm reboot(暖重启)什么是热重启,什么是冷重启,有什么区别。(3)什么是看门狗重启。(4)什么是掉电重启。原创 2023-10-22 11:49:03 · 333 阅读 · 0 评论 -
linux gdb 跟踪socket 文件读写和其数据间的传递
功能:首先在客户端实现文件的写入,写入一个结构体,在服务器端需要接受(即读出结构体打印),而后在服务器端接受到结构体后(读出),而后将读出的结构体写入套接字。调试技巧:gdb跟踪代码调试:代码服务器端server_gdb.c#include <sys/types.h>#include <sys/socket.h>#include <stdio.h&g...原创 2019-08-31 21:44:34 · 868 阅读 · 3 评论 -
gdb 跟踪调式core
编译:使用gdb调试core文件来查找程序中出现段错误的位置时,要注意的是可执行程序在编译的时候需要加上-g编译命令选项。原创 2023-04-11 11:50:46 · 2310 阅读 · 0 评论 -
linux udp bind 返回值-1分析(端口被占用)
在linux socket通信中,我们通常用到open/bind/read/write等内部函数,那么当这些函数返回值为-1的时候,我们怎么进一步定位呢!(1)怎么打印出返回值出错的原因呢!strerror头文件。原创 2023-04-06 16:27:27 · 1343 阅读 · 0 评论 -
编译原理(gcc,makefile)
最初是作为C语言的编译器(GNU C Compiler),现在已经支持多种语言了,如C、C++、Java、Pascal、Ada、COBOL语言等。命令(COMMAND)是make执行的动作(命令是shell命令或是可在shell下执行的程序)。目标也可以是要执行的动作,如clean,也称为伪目标。1、一个与共享库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码。在使用C语言和其他语言进行程序设计的时候,我们需要头文件来提供对常数的定义和对系统及库函数调用的声明。原创 2022-11-13 11:16:04 · 395 阅读 · 0 评论 -
代码跟踪调式方法
1,我们很多时候被函数的调用关系弄得头晕,这里gdb,sourceinsight 给出了方面gdb bt原创 2021-11-27 16:01:16 · 231 阅读 · 0 评论 -
调试方法总结之gdb跟踪
1,当我们发现我们预想的值和实际的数值不一样时,这个时候应该怎么办呢!首先我们需要确认是否调到了这个接口,如果掉到了这个预期结果的接口,那么说明可能在我们达到了预定结果之后结果又被其他函数给改变了,这个时候我们就需要确定那些接口调用了该函数,可以用sourceinsight查看改变这个变量的地方,一一跟踪可以查到哪里改变了这个数据,然后再分析为什么数据会发生改变。...原创 2021-09-06 15:02:31 · 596 阅读 · 0 评论 -
死锁如何定位
在程序中我们通常用到锁机制,但是我们有时候无意之中可能地方存在思索,那么我们如何快速的定位到思索的位置呢?首先第一次问题出现在我们眼前,什么时候我们想到时死锁问题导致的现象呢!其实死锁的现象很明显,就是系统启动正常,但是应用程序卡死,这个时候大概率就是死锁了,如果系统挂死,这个时候就是系统或者硬件出现问题了,这个时候我们就应该用串口查看打印,看看该死在哪里,我们今天先不说这种情况,我们今天只看应用程序挂死的情况,说会之前的那一句,程序卡死一定是有地方有互斥锁没有释放,我们先来看看下面这个简单的例子:原创 2021-09-20 12:23:03 · 467 阅读 · 0 评论 -
cpu过高定位方法
1,当我们在开发过程中疯狂的写寄存器时,cpu会疯狂上涨,那么我们怎么定位是哪个函数导致的cpu过高呢首先我们用top来看占用cpu情况:其次我们来看那个进程占cpu最高:top -H -p pid(这里就是542)...原创 2019-12-30 20:42:13 · 400 阅读 · 0 评论 -
调试手段-加全局打印-gdb也更好的跟踪变量
1,我们在用gdb跟踪程序的时候,发现有些变量不是很好的跟踪调试,这个时候加全局变量可以更好的用gdb跟踪,而且我们在最开始写代码调试的时候用gdb调试,但是我们在代码进入集成和终试的时候再用gdb就不合适了,这个时候我们需要打印每个接口函数里面的数值,这样的话我们用打印开关或者打印函数来辅助我们来查找问题,所以我们定位我们的问题的时候要分情况,开发初期我们用gdb作为主要手段,打印作为辅助手段,...原创 2019-11-10 12:48:20 · 489 阅读 · 0 评论 -
任务超时怎么定位
1,我们在开发过程中很多时候需要轮询调用一个函数,我们在vxworkx里面将这一操作称之为任务,而在项目中我们又将任务分为3种,low_gather,high_gather,real_gather:而low_gather则是50ms轮询一次(即是10tick,1tick = 5ms),而high_gather和real_gather则是5ms轮询一次(1tick),这就引出了我今天需要写的问题,任务超时。typedef int (*test_fun)(void) TEST_FUN;TEST.原创 2021-02-07 22:21:05 · 300 阅读 · 0 评论 -
Linux 打印调试技巧
1,函数打印调用次数的控制在循环中打印次数的控制举例说明:#include<stdio.h>int g_print_num = 0;int main(){ while(1) { if(g_print_num++ < 10) { printf("g__print_num print\n"); } else { ...原创 2019-12-30 19:47:45 · 462 阅读 · 0 评论 -
代码框架调试技巧
1,硬件跑不起来了,应用软件的进程起不来了,此时就需要用串口来看;2,硬件初始化成功,但是应用软件跑到中间某个地方挂了,这个时候我们可以用gdb单步跟踪,(1)主函数的初始化入口函数开始,单步跟踪,范围从里到外来定位举例说明:#include<stdio.h>int fun(){ return -1;}int fun_fourth(){ int ret = fun(); if(ret < 0) {原创 2021-06-28 19:29:32 · 91 阅读 · 0 评论 -
项目开发的过程总结
我们在公司是怎么开发的呢!1,项目需求:项目组开会定方案。2,项目开发主干上开发吗!对于人多的项目来说,最好在分支上开发,最后合并到主干。最好拉分支。在分支上开发,最后合并到trunk主干上。3,特性测试功能测试:测试报告:4,集成测试(定位问题,和其他功能模块交互)(1)测试人员测试:过每一个功能项。5,迭代版本测试:(1)迭代版本1(2)迭代版本26,封版本:起一个流程ecn。...原创 2021-04-20 21:08:22 · 530 阅读 · 0 评论 -
fpga的学习和调试技巧
1,在学习fpga之前,我们先来学习一下对数据的基本操作,包括数据的左移,右移,以及数据的与或非和异或。(1)数据的左移unsigned int a = 0x16; // 0B00010110unsigned int b = a << 2;//0B01011000printf(" b = 0x%x\n",b);//0x58(2)数据的右移unsigned int a = 0x16;//0B00010110unsigned int b = a >> 2;//原创 2021-04-01 22:48:08 · 454 阅读 · 0 评论 -
开发过程中如何定位问题
在开发过程中,我们经常会遇到各种各样的问题,那么我们一般是怎么定位问题的呢!今天在这里我就做一个小小的总结。1,因为在项目中涉及到各个模块之间的配合开发,而且很多时候我们使用的是别人提供的外链,所以第一步我们先要确定外链是否使用正确,这个一般看svn外链路径或者git外链路径即可,查看外链路径正确之后我们需要考虑到各个模块之间代码的合并,那么我们首先需要确定版本合进去了,这样我们首先查看版本号,而且我们需要在自己的代码模块中加入版本打印函数。****************************原创 2021-04-01 21:05:17 · 477 阅读 · 0 评论 -
linux svn外链学习
很多时候我们申请权限成功时但是没下载权限时,我们可以在svn里面的settins->saving data里面clear这些数据,然后重新登录。1,svn怎么样更改外链路径!找到一个路径下面能够打开如图所示的选项:首先打开TortoiseSVN->properties,我们可以看到下面的界面(最好多个子目录尝试) 然后找到打开Edit,在此界面我们可以删除外链,也可以更改外链映射路径。记住改完之后保存,一直ok之后,最后要提交...原创 2020-12-16 23:08:02 · 420 阅读 · 0 评论 -
gdb跟踪段错误_ 如何产生core_dump文件
,在调试过程中我们如果遇到段错误的时候,我们有时候会很懵逼,这个时候我们怎么去定位呢!这里我把我调试的经验写在这里,供自己以后运到问题时可以参考:程序跑着跑着段错误:这个时候除了分析代码用的最多的就是gdb了,而只用gdb有时候只能看到段错误,不能精确的看到到底是在那段代码中出了问题,所以这个时候就得依赖core_dump了,那么如何产生core_dump和用gdb呢! 先gcc main.c -g (linux 下加-g就可以用gdb了), gdb a.out 进入, b main 打断点 r 运原创 2020-12-11 16:07:23 · 281 阅读 · 0 评论 -
使用GDB调试时attach ID不允许的操作
gdb attach PID出错:不允许的操作(1)挂起程序:gcc 2_threadLock.c.c -lpthread -g -o 2_threadLockps -aux|grep 2_threadLock 查看pidps -aL 查看线程id号pstree -p pid(此处的pid是上面输出的pid)出错后,按下面做法做即可:sudo vim /etc/sysctl....原创 2019-04-17 23:38:13 · 1467 阅读 · 3 评论 -
linux gdb调试总结(常用调试命令)
linux gdb单函数调试gcc test.c -g 运行函数gdb a.outgdb -q a.out (可以不用看到打印出来的消息)1,l(list)看自己的代码,默认一次显示10行q :退出调试2,shell clear:清屏3,r(run) 运行4,info terminal 用于显示程序用到的终端的模式info registers (查看除了浮点寄存器以外的寄存器)...原创 2021-06-05 18:56:12 · 745 阅读 · 0 评论 -
常见的内存错误及其对策
1,常见错误及其处理策略:(1) 内存分配未成功,却使用了它。编程新手常犯这种错误,因为他们没有意识到内存分配会不成功。常用解决办法是,在使用内存之前检查指针是否为NULL。如果指针p是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查。如果是用malloc或new来申请内存,应该用if(p==NULL) 或if(p!=NULL)进行防错处理。(2) 内存分配虽然成功,...原创 2019-04-09 15:45:44 · 226 阅读 · 0 评论 -
gdb free invalid pointer问题解决
1,代码问题:新建 gdb.c#include<stdio.h>#include<stdint.h>#include<stdlib.h>//#include <sharemem.h>void fun(uint8_t* p){ uint8_t a = 100; *p = a;}void fun1(int* p)...原创 2019-07-28 09:58:38 · 4309 阅读 · 0 评论 -
gdb 跟踪指针(malloc)
1,我们在使用参数传递的时候#include<stdio.h>#include<stdlib.h>#include<assert.h>char* add(int a){ switch(a) { case 0: return "zero"; break; case 1: retur...原创 2019-10-26 00:25:17 · 1361 阅读 · 0 评论 -
stack smashing detected 栈溢出小结
1,代码实现:#include<stdio.h>#include<stdint.h>#define LASER_FAIL 0#define LASER_OK 1uint32_t fhapp_laser_logic_on(){ uint32_t p_data = 1; return p_data;}uint8_t fhapp_laser_on...原创 2019-07-29 23:02:02 · 2901 阅读 · 0 评论 -
gdb call跟踪函数
1,在开发过程中我们需要传递各种数据,因此需要调用别人的接口,那么我们如何确我们调用到了别人的函数,调用别人函数的时候,我们怎么样判断获取的数据是否正确呢,除了前面博客中写到的加入全局变量后加打印,我们还可以使用最直接的方法用gdb中的call命令来实现调用,来判断我们读取的数据是否正确,现在我举一个我在项目中的调用实现过程:从上面的例子我们可以看出:使用call 设置数据和获取数据,获...原创 2019-12-09 21:04:58 · 4012 阅读 · 0 评论 -
Linux mtrace调试内存泄漏
本文只介绍一个实用的linux小命令:mtrace(memory trace), 它能够用来协助定位内存泄露Linux下测试代码:4_trace.c#include <stdio.h>#include<stdlib.h>int main(){ setenv("FREE_TRACE", "taoge.log", "1"); ...原创 2019-04-18 22:09:49 · 294 阅读 · 0 评论 -
Linux memwatch 的使用
下载代码:http://www.linkdata.se/sourcecode/memwatch/下载代码后解压得到如下文件mamwatch.c和memwatch.h是不用动的,我们需要改的是test.c第一步,在test.c加入头文件 #include"memwatch.h"其次编写自己的代码:我的代码如下:#include <stdio.h>#in...原创 2019-04-18 22:53:24 · 574 阅读 · 0 评论 -
Linux 下面Valgrind跟踪内存泄漏
在写大型C/C++工程时难免会发生内存泄漏现象,系统编程中一个重要的方面就是有效地处理与内存相关的问题。你的工作越接近系统,你就需要面对越多的内存问题。有时这些问题非常琐碎,而更多时候它会演变成一个调试内存问题的恶梦。 常见的内存问题一共七种:1. 动态内存泄露;2. 资源泄露,比如文件指针不关闭;3. 动态内存越界;4.数组内存越界;5.动态内存double free;6.使用野指针,即未...原创 2019-04-19 00:48:20 · 485 阅读 · 0 评论 -
Linux 宏定义debug调试
1,宏定义:#include <stdio.h>#include <stdarg.h>#define BUFFER_SIZE 1024#define DEBUG_LEVEL 4typedef enum{ DEBUG_LEVEL_ERROR=0, DEBUG_LEVEL_WARNING, DEBUG_LEVEL_NOTICE...原创 2019-04-29 22:47:31 · 1176 阅读 · 0 评论 -
linux gdb调试中start,c watch的使用举例
1,start(程序开始执行,从main开始)main.c文件:#include<stdio.h>int main(){ int a,i; for(i=0;i<10;i++) { scanf("%d",&a); }}2,gdb 跟踪:...原创 2019-07-24 23:56:26 · 448 阅读 · 0 评论 -
linux gdb中c(continue)的使用总结
在前一段时间中,我使用gdb测试一些程序,我还是没有弄清楚continue的用法,在项目中也是如此,continue是怎么样在实践中轮询机制的。现在我如果想要快步的跳跃到某行来调试程序,使用两个断点和c可以调试程序,举例如下1_gdb.c。#include<stdio.h>void myprintf(long res){ printf("hello word\n");...原创 2019-08-01 23:11:11 · 4640 阅读 · 0 评论 -
linux gdb调式入门(break,continue,step finnish,run,watch,bt frame),这篇就够了
建立2_gdb.c 1 #include<stdio.h> 2 3 int fun(int n) 4 { 5 int sum = 0; 6 int i = 0; 7 for(i=0;i<n;i++) 8 { 9 sum =sum + n; 10 } 11 return su...原创 2019-09-18 22:09:50 · 579 阅读 · 1 评论 -
linux gdb线程调试
1,代码举例,新建一个lock.c:#include <stdio.h> #include <stdlib.h>#i...原创 2019-09-20 22:31:23 · 130 阅读 · 0 评论 -
linux gdb c语言野指针,栈指针和函数参数指针传递总结
1,代码举例:#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct stu{ int num; char name[10]; int sex;}STU;int main(){ STU* s1 = (STU*)malloc(s...原创 2019-09-26 22:33:46 · 510 阅读 · 0 评论 -
linux 程序中断言的使用和gdb跟踪断言
我们在编写程序时使用指针时我们需要对指针进行检验,即是我们对其进行断言判断处理,现在我们举例说明:1,新建exception.c#include<stdio.h>#include<assert.h>#include<stdlib.h>#include<string.h>void memory_app(int** p){ a...原创 2019-09-29 23:30:33 · 686 阅读 · 0 评论 -
Linux gdb检测之core dump
首先创建一个测试文件,命名为3_coredump.c#include <stdio.h> int func(int *p){ *p = NULL;} int main(){ func(NULL); return 0;}gcc 3_coredump.c -o 3_coredumulimit -c u...原创 2019-04-18 21:08:07 · 194 阅读 · 0 评论