段错误的愿意和调试方法

段错误的愿意和调试方法

主要的原因:

  1. 访问了不存在的内存指针
  2. 访问系统保护的内存地址
  3. 方位只读的内存地
  4. 数组越界
  5. 栈溢出

主要查看,指针的问题是否出现错误使用

方法1. gdb直接调试

使用run命令直接报错,查看

方法2. 调试core文件,

当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫 core dump(核心转储)。

2.1 打开 core dump 功能

终端输入:

 ulimit -c

如果输出 0,说明,core的文件大小为0,也即没有开启 core dump 功能

不限制 core dump 存储信息的大小,可以执行:

 ulimit -c unlimited

限制 core dump 大小,可以执行(单位是 KB):

 ulimit -c 1024

2.2 永久修改(可选)

以上指令只对当前终端有效,想要永久生效需要修改 “/etc/security/limits.conf” 文件,重启后生效

 sudo vim /etc/security/limits.conf

gdb ./执行文件 ./core,结果告诉出错的位置,会生成当前目录下

2.3 修改 core 文件保存路径和命名(可选)

默认情况下,内核在 core dump 时所产生的 core 文件放在与该程序相同的目录中,并且文件名固定为 core

执行下面指令修改 core 文件路径:

 echo /tmp/crash/core-%e-%t | sudo tee /proc/sys/kernel/core_pattern

其中 “/tmp/crash/core-%e-%t” 是 core dump 文件的保存路径和命名

注意:这里的 “/tmp/crash/” 目录如果不存在,程序崩溃时候不会自动创建 “/tmp/crash/” 目录,也就不会保存 core dump 文件了

参数表:

  • %p - insert pid into filename 添加pid(进程id)
  • %u - insert current uid into filename 添加当前uid(用户id)
  • %g - insert current gid into filename 添加当前gid(用户组id)
  • %s - insert signal that caused the coredump into the filename 添加导致产生core的信号
  • %t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
  • %h - insert hostname where the coredump happened into filename 添加主机名
  • %e - insert coredumping executable name into filename 添加导致产生core的命令名

2.4 程序添加 gdb 调试信息

catkin_make 编译:

 catkin_make -DCMAKE_BUILD_TYPE=Debug

或者在 CMakelist.txt 文件前面添加以下代码

SET(CMAKE_BUILD_TYPE "Debug")  
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")  
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

当程序运行崩溃后,会在 “/tmp/crash/” 目录中产生 core dump 文件

2.5 执行这句话即可

 gdb /devel/lib/xxx.so xxx-core

参考https://zhuanlan.zhihu.com/p/655272437

方法3. 反汇编定位

3.1 使用dmseg命令,定位出现段错误的输出信息的地址

demsg
即出现对应的段错误的指令指针对应的地址,记住这个地址

3.2 或者使用catchsegv定位错误地址

catchsegv ./可执行程序

3.3 反汇编进行查看

使用 objdump -S ./可执行程序>logdump

根据出错的段错误地址,确定出错的位置

总结:

  • 出现段错误的时候,首先想一想段错误的定义,出现的原因
  • 编程的时候,定义变量最好初始化
  • 数组不越界使用

其他报错:

  1. 循环使用,出现段错误:查看你的频率和休眠时间是否对应;

  2. double free问题:等待补充;

  3. 在使用ceres/g2o报错时,在cmakeList.txt,set(CMAKE_CXX_FLAGS “-std=c++11 -march=native -O3”) 可以参考https://blog.csdn.net/weixin_46120107/article/details/130663182

set(CMAKE_CXX_FLAGS "-std=c++11 -march=native -O3")
===> 
native 就是相当于自检查cpu,
-march是gcc优化选项,
-Ox 这个参数只有在 cmake -DCMAKE_BUILD_TYPE=release时有效

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/174423.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#学习-8课时

P10 输入输出程序编写 相同类型的可以直接相加; cwtabtabconsole.Writeline(); using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace C_8_1 { class Program { s…

关键路径-STL版/拓扑排序 关键路径【数据结构】

关键路径-STL版 题目描述 给定有向图无环的边信息,求每个顶点的最早开始时间、最迟开始时间。 输入 第一行图的顶点总数 第二行边的总数 第三行开始,每条边的时间长度,格式为源结点 目的结点 长度 输出 第一行:第个顶点的最早…

性能压测工具:wrk

一般我们压测的时候,需要了解衡量系统性能的一些参数指标,比如。 1、性能指标简介 1.1 延迟 简单易懂。green:一般指响应时间 95线:P95。平均100%的请求中95%已经响应的时间 99线:P99。平均100%的请求中99%已经响应的时间 平…

案例030:基于微信小程序的英语学习交流平台

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

电子学会C/C++编程等级考试2021年12月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:我家的门牌号 我家住在一条短胡同里,这条胡同的门牌号从1开始顺序编号。 若所有的门牌号之和减去我家门牌号的两倍,恰好等于n,求我家的门牌号及总共有多少家。 数据保证有唯一解。 时间限制:1000 内存限制:65536输入 一个…

CSGO搬砖如何选品?选品软件和教程靠谱吗?

说到CSGO搬砖项目,目前平台最火的就是CSGO游戏搬砖。在CSGO搬砖项目中,选品是至关重要的环节,直接影响到利润。而选品软件可以帮助我们更快地了解市场变化、计算成本利润等关键信息,提高选品的效率和准确性。可靠的选品软件还能够…

简易版王者荣耀

所有包和类 GameFrame类 package newKingOfHonor;import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; import java.util.ArrayList;im…

如何使用技术SEO来优化产品轮播

SEO(搜索引擎优化)对你来说并不陌生。现代电子商务系统通常包含旨在吸引谷歌等搜索引擎机器人注意的关键字。 但是,技术 SEO 在代码和服务器级别调查电子商务 SEO 策略。它改善了网站的技术因素,例如页面加载的速度以及抓取的直接…

MySQL三范式

欢迎大家到我的博客浏览。MySQL三范式 | YinKais Blog 简介 三大范式是 MySQL 数据库设计表结构所遵循的规范和指导方法,目的是为了减少冗余,建立结构合理的数据库,从而提高数据存储和使用的性能。 三大范式之间是有依赖关系的&#xff0c…

pytorch训练模板

来源:http://worthpen.top/#/home/blog?blogpot-blog36.md 引言 本项目实现了基于PyTorch Lightning的神经网络训练和测试管道。项目除了实现PyTorch Lightning的工作流外,还实现了通过任务池在训练过程中添加任务、k折交叉验证、将训练结果保存在.cv…

【华为OD】统一考试B\C卷真题 100%通过:开源项目热榜 C/C++实现

目录 题目描述: 示例1 示例2 题目描述: 某个开源社区希望将最近热度比较高的开源项目出一个榜单,推荐给社区里面的开发者。对于每个开源项目,开发者可以进行关注(watch)、收藏(star)、fork、提issue、提交合并请求(MR)等。 数…

一觉睡到大天亮,dido P1S智能手环体验

智能穿戴设备对于有关注健康的朋友来说,是非常使用的工具,它们可以帮助我们实时监测一些健康数据,最近几年,国产的智能穿戴设备突飞猛进,大幅拉低了价格门槛,而且使用体验也很不错,现在我用的也…

Maven回顾

Maven 下载(前提要有jdk) Maven 下载地址:Maven – Download Apache Maven 设置 Maven 环境变量 添加环境变量 MAVEN_HOME: 右键 "计算机",选择 "属性",之后点击 "高级系统设置…

【Yocto】yocto编译系统Image优化笔记

yocto编译系统Image优化笔记 使用yocto编译出来的Image文件(比如ext4格式)有时候根据业务需求,是要进行剪裁以缩小Image的Size。 比如系统有OTA需求,系统预留的OTA分析大小是500M。但是Image(ext4格式)是1G大小。即使…

Python验证厚尾数据遵循幂律分布

统计学是数据科学和分析的基石。 它为我们提供了一个强大的工具箱来客观地回答复杂的问题。 然而,许多我们最喜欢的统计工具在应用于特定类别的数据(幂律)时变得毫无用处。 统计中的幂函数分布 scipy.stats.powerlaw() 是幂函数连续随机变量…

Python---练习:使用Python函数编写通讯录系统

预览通讯录系统最终效果 首先,进行需求分析,整个系统功能,分为6个板块,功能如下: ① 添加学员信息 ② 删除学员信息 ③ 修改学员信息 ④ 查询学员信息 ⑤ 遍历所有学员信息 ⑥ 退出系统 系统共6个功能&#xff…

Lighthouse(灯塔)—— Chrome浏览器强大的性能测试工具

本文浏览器版本参考如下: 一、认识Lighthouse Lighthouse 是 Google 开发的一款工具,用于分析网络应用和网页,收集现代性能指标并提供对开发人员最佳实践的意见。 为 Lighthouse 提供一个需要审查的网址,它将针对此页面运行一连…

TIME_WAIT状态套接字重新使用

《TIME_WAIT相关知识》里边有相关理论知识。 《TIME_WAIT状态TCP连接导致套接字无法重用实验》有相关实验。 现代Linux的TCP协议栈已经做了许多升级,所以可以让我们直接重用TIME_WAIT状态套接字而不会引起问题。下边是优化的内容: 1.新连接的SYN告知序列…

post请求乱码

如果在处理 POST 请求时出现乱码&#xff0c;你可以配置一个过滤器&#xff08;Filter&#xff09;来处理请求体的字符编码。以下是一个简单的 Java Servlet 过滤器的例子&#xff0c;用于设置请求和响应的字符编码&#xff1a; 在 web.xml 中配置过滤器&#xff1a; <filt…

MyBatis-Plus简介和入门操作

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…