首页 > 其他分享 >如何生成core文件进行项目调试

如何生成core文件进行项目调试

时间:2023-12-14 15:26:32浏览次数:31  
标签:core 文件 生成 调试 test data mmc

由于项目前期的调试错误比较多,或者有某些隐藏危险:例如内存泄漏;偶尔才出现一次,如果没有捕捉错误的手段可能好不容易出现的机会就溜走了,所以生成core文件是必要的,发生段错误会生成相应的core文件,使用gdb可以查询错误原因和堆栈情况。

生成core文件

那么如何在程序发生段错误时生成core文件呢?可以写一个脚本run.sh,脚本内容如下:

#!/bin/sh
#启用核心转储功能,将核心转储大小的软限制设置为无限制。前提是文件系统没有禁用该功能
ulimit -c unlimited
#下面这两行都能设置生成core文件的名字及路径,使用任意一行即可;生成core文件的路径(/mmc_data/core)必须可写,最好chmod 777 /mmc_data/core -R
#默认是在当前目录想生成名为core的文件
#echo "/mmc_data/core/coremat" > /proc/sys/kernel/core_pattern
core_pattern="/mmc_data/core/test_core"
#执行你要运行的程序
./test

每次使用脚本run.sh运行程序,当程序发生错误时即可在/mmc_data/core/目录下生成test_core文件。

生成不同名字的core文件

有时候在系统中运行不止一个程序,为了防止不同程序产生的core文件互相覆盖就需要针对不同的程序生成不同的core文件,具体方法如下:

ulimit -c unlimited
#当然,如果你想每次出错都生成不同名字的core文件可以进行如下设置:core文件的名称将包含可执行文件名、进程 ID 和生成时间戳的信息。
#下行命令也可以实现让多个程序发生错误时生成不同名字的core文件,方便调试
sysctl -w kernel.core_pattern="/mmc_data/meta8k/core/core-%e-%p-%t"
: '
占位符介绍,可根据自己的需求使用:
%e:可执行文件的名称
%p:进程的 ID
%h:主机名
%s:信号名称
%t:时间戳
%u:用户名
%g:组名
'
./test

然后使用gdb工具分析即可:

#执行如下命令进入gdb分析
gdb test test_core
#进入之后执行bt即可看到错误位置及错误原因
bt

注意:编译test程序时必须使用-g参数,不然不能使用gdb工具,关于gdb的更多用法参考的的另一篇博客。

关闭core文件生成

如果想要关闭core文件的生成执行以下命令:

#核心转储大小的软限制设置为0
ulimit -c 0
#清空配置文件
echo "" > /proc/sys/kernel/core_pattern
#注意:如果是清空配置文件,需要再设置配置文件才能再生成core:echo "/mmc_data/core/coremat" > /proc/sys/kernel/core_pattern

想要了解更多linux及音视频信息,关注我后续更新!

标签:core,文件,生成,调试,test,data,mmc
From: https://www.cnblogs.com/yhfs/p/17901232.html

相关文章

  • 真实照片与人工智能生成的艺术:新标准 (C2PA) 使用 PKI 来显示图像的历史
    https://www.asiaregister.com/zh/news/zhen-shi-zhao-pian-yu-ren-gong-zhi-neng-sheng-cheng-de-yi-shu-xin-biao-zhun-C2PA-shi-yong-PKI-lai-xian-shi-tu-xiang-de-li-shi-2661.htm在网上辨别真假变得越来越困难。Adobe、微软、索尼、DigiCert和数十家其他行业领导者推出的......
  • gdb调试带参数的应用程序
    $gdb--args./AV1V2V3$gdb./A,进入gdb后 runV1V2V3$gdb./A,进入gdb后 设置参数setargsV1V2V3再直接run。 参考:https://blog.csdn.net/guoqianqian5812/article/details/51755852?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-b......
  • 利用Docker和CLion在Mac优雅地开发和调试Linux C++程序
    利用Docker和CLion在Mac优雅地开发和调试LinuxC++程序starrymarin计算机主业,间断性健身爱好者,摩托、金融入门​关注他 27人赞同了该文章最近在做一些新的东西,所以学习了一些新的东西,也对旧知识加强了很多,所以终于有东西可以记录一下了。今天先更......
  • .net core 分布式锁 之 基于 Redis 的 RedLock
    使用场景分布式锁的业务场景涉及到并发控制、任务调度、缓存更新、分布式事务和防止重复操作等方面,能够保证分布式系统的数据一致性和正确性。并发控制:当多个线程或进程同时访问共享资源时,使用分布式锁可以确保只有一个线程或进程能够访问该资源,避免数据竞争和并发冲突。分......
  • 聊一聊 .NET高级调试 内核模式堆泄露
    一:背景1.讲故事前几天有位朋友找到我,说他的机器内存在不断的上涨,但在任务管理器中查不出是哪个进程吃的内存,特别奇怪,截图如下:在我的分析旅程中都是用户态模式的内存泄漏,像上图中的异常征兆已经明确告诉你了,不是用户态程序吃的内存,那就是内核态程序吃的,比如:某些驱动程序操......
  • 如何判断lib和dll是32位还是64位?答案是使用微软的dumpbin工具,后面讲了如何使用gcc生成
    为什么我会考虑这个问题呢?因为我在使用java去调用一个c的lib库的时候,弹出以下警告:D:\work\ideaworkpaces\jdk21Test001\src\main\java\lib\hello.lib:%1不是有效的Win32应用程序。atjava.base/jdk.internal.loader.NativeLibraries.load(NativeMethod)然后我就在想是不是......
  • Flutter attach调试
    简介一旦将flutter模块集成到原生项目中,由其是iOS的原生项目,我们是否能够保留flutter的快速开发调试的优势呢?即是否还可以通过Hotreload或者HotRestart来快速开发呢?那么对应flutter模块,我们如何使用hotreload加速我们的调试速度呢?答案就是:flutterattach调试(开发工具:Xcode......
  • 调试日记
    调试日记2023/12/1321:15题目:P3469&SP15577(两道题题意完全相同)表现:读入大样例时RE。用之前AC的代码测大样例,仍然RE。分析:发现RE的原因是栈空间太小。NOI规定的栈空间为512MB(待查),而DevC++默认的栈空间较小。这道题用到了dfs,递归层数较多,导致RE。解决方案:加......
  • 如何使用java生成 Excel 股票图?
    要使用Java生成Excel股票图,可以使用POI库来操作Excel文件,使用JFreeChart库来生成股票图。首先,确保已经添加了以下依赖库:ApachePOIJFreeChartJCommon下面是一个简单的示例代码,用于生成一个包含股票图的Excel文件:importorg.apache.poi.ss.usermodel.*;importorg.apache.poi.xssf.......
  • vs code调试appium-adb项目记录
    一、前言因为使用appium的时候发现一个问题,最后定位在是appium-adb执行的时候processExists函数时出现的问题。因此需要对appium-adb进行断点调试以及修改。appium-adb项目是使用javascript和Typescript写的,所以也就是对js项目的调试。因为第一次接触js,很多东西一步步摸索过来的......