core

使用gdb和core dump迅速定位段错误(完)

▼魔方 西西 提交于 2019-12-10 03:35:39
使用gdb和core dump迅速定位段错误 关键字:gdb、段错误、core dump 一、什么是core dump core:内存、核心的意思; dump:抛出,扔出; core dump:前提:当某程序崩溃的一瞬间,内核会抛出当时该程序进程的内存详细情况,存储在一个名叫core.xxx(xxx为一个数字,比如core.699)的文件中。 二、更改生成的core文件的大小限制 可见,core文件是内核生成的,那某一个进程因为段错误而崩溃的时候的内存映像很大,那必然会生成一个很大的core文件,所以我们可以通过ulimit命令来设置生成core文件的大小,例如$ulimit -c unlimited,这里就是设置生成的core文件无大小限制。 三、生成core文件 当第二步完成了,就运行一次那个有问题的程序,然后自然就会因为段错误而崩溃,在当前目录下就生成了core.xxx文件。 四、分析core文件 使用命令$gdb 程序名 core.xxx,然后再输入where就可以看到产生段错误的地方。 五、实例分析 1.test.c文件的源代码 1 void do_it(); 2 int main() 3 { 4 do_it(); 5 return 0; 6 } 7 void do_it() 8 { 9 char* p = 1; //定义一个字符指针变量a,指向地址1

Segment fault及LINUX core dump详解

◇◆丶佛笑我妖孽 提交于 2019-12-10 03:32:12
C 程序在进行中发生segment fault(core dump)错误,通常与内存操作不当有关,主要有以下几种情况: (1)数组越界。 (2)修改了只读内存。 (3)scanf("%d",n),n不是指针。 …… 1. 前言: 有的程序可以通过编译, 但在运行时会出现Segment fault(段错误). 这通常都是指针错误引起的. 但这不像编译错误一样会提示到文件->行, 而是没有任何信息, 使得我们的调试变得困难起来. 2. gdb: 有一种办法是, 我们用gdb的step, 一步一步寻找. 这放在短小的代码中是可行的, 但要让你step一个上万行的代码, 我想你会从此厌恶程序员这个名字, 而把他叫做调试员. 我们还有更好的办法, 这就是core file. 3. ulimit: 如果想让系统在信号中断造成的错误时产生core文件, 我们需要在shell中按如下设置: #设置core大小为无限 ulimit -c unlimited #设置文件大小为无限 ulimit unlimited 这些需要有root权限, 在ubuntu下每次重新打开中断都需要重新输入上面的第一条命令, 来设置core大小为无限. 4. 用gdb查看core文件: 下面我们可以在发生运行时信号引起的错误时发生core dump了. 发生core dump之后, 用gdb进行查看core文件的内容,

skui学习笔记

爷,独闯天下 提交于 2019-12-10 00:51:47
一、skui简介 使用Skia作为低级绘图工具包的UI框架。它使用C ++标准库的最新功能(当前针对C ++ 17)。目前这个仓库处于开发阶段,功能还不稳定。该仓库的源代码在github上( https://github.com/skui-org/skui ),作者是Ruben Van Boxem,遵循MIT开源协议。 这里不得不先介绍一下skia。Skia是一个开源2D图形库,它提供可在各种硬件和软件平台上工作的通用API。它用作Google Chrome和Chrome OS,Android,Mozilla Firefox和Firefox OS以及许多其他产品的图形引擎。Skia由Google赞助和管理,根据BSD自由软件许可,任何人均可使用。skia的优势在于CPU和2D渲染。 二、编译环境搭建 我的编译环境:Ubuntu18.04LTS,GCC版本7.4.0 首先从github上克隆仓库 git clone https://github.com/skui-org/skui.git 进入仓库 cd skui 更新子模块仓库 git submodule update --init --recursive 有的时候会在拉取skia的时候卡住,这时候进入3rdparty目录再次拉取 cd 3rdparty git submodule update --init --recursive

蜂鸟E203(二)如何运行Verilog仿真测试平台

一个人想着一个人 提交于 2019-12-10 00:50:50
从github下载蜂鸟E203如下所示(github上仅提供E203源代码): riscv/riscv-tools在(一)已经在eclipse中配置完成。 risc-v tools包含: (1)GCC(GNU C compile) (2)C运行库 (3)Binutils (4)GDB以及Openocd (其中在使用git的过程中,一般我们总会有些文件无需纳入git的管理,也不希望它们总出现在未跟踪文件列表,这些文件通常是日志文件、临时文件、编译产生的中间文件、工具自动生成的文件等等。此时我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式,Git会根据这些模式规则来判断是否将文件添加到版本控制中) 如何在verilog tb中利用vcs 软件运行riscv-tests自测试用例 自测试用例(riscv-test),由上图所示,在其子文件夹isa下, 包含由汇编语言编写的一些测试处理器是否符合指令集架构定义的测试文件。 其中不同文件夹均是扩展指令集的指令测试: 基础指令集:RV32I RV64I 标准扩展 M(整数乘/除) 标准扩展A(原子内存操作) 标准扩展 C(精简的16位指令) 标准扩展 F(单精度浮点数) 标准扩展 D(双精度浮点数) 特权级 M(Machine) 特权级U(User) 特权级S(Supervisor) 而riscv

iOS 简单的使用UIBezierPath绘制

夙愿已清 提交于 2019-12-09 17:28:32
UIBezierPath这个类呢主要用于绘图。 之前的项目中需要绘图的部分都是用Core Graphics来绘制,OC是我的第一门语言,所以对于Core Graphics的C语言API不太适应,最近发现原来苹果的UIKit中已经对Core Graphics做了一些简单的封装,UIBezierPath就是其中一个。UIBezierPath已经完全满足了我对绘图的一些基本要求。 UIBezierPath的好处显而易见。 * 首先它是OC语言的,相对于c语言的Core Graphics来说更为平易近人。 * 其次它能够使用ARC,如果我们直接使用CGPathRef的话,还要自己负责在合适的时候释放。 现在我就根据自己的使用来做一下简单记录。 使用 UIBezierPath的使用相当简单,分为三步: * 创建path * 添加路径到path * 将path绘制出来 例如我们来画条线: // 创建path UIBezierPath *path = [UIBezierPath bezierPath]; // 添加路径[1条点(100,100)到点(200,100)的线段]到path [path moveToPoint:CGPointMake(100 , 100)]; [path addLineToPoint:CGPointMake(200, 100)]; // 将path绘制出来 [path

linux core dump

不打扰是莪最后的温柔 提交于 2019-12-09 17:24:15
Core dump: 在程序运行过程中异常终止或崩溃,操作系统将当时的内存状态记录下来,保存在一个文件中。 其中会包含寄存器信息(包括程序指针,栈指针等),内存管理信息,操作系统状态等信息。 linux 中默认忽略 Stop信号、Terminate信号、Ignore信号等,如果信号在默认情况下,在下列几种信号发生时 会产生core dump: SIGQUIT(quit from keyboard ), SIGILL(illegal instruction), SIGABRT(abort signal), SIGSEGV(invalid memory reference), SIGTRAP(trace/breakpoint trap) ctrl+z 挂起进程 SIGTSTP信号(默认为暂停进程) ctrl+c终止进程 SIGINT信号(默认为终止进程) ctrl+\ (默认SIGQUIT信号)产生core dump 打开core dump: 在终端输入 ulimit -c ,输出为0,说明默认是关闭core dump的 输入 ulimit -c unlimited 开启core dump功能,并且不限制core dump文件的大小,如果要限制文件大小, 将unlimited改成需要的文件大小,单位为blocks(KB) 以上命令支队当前终端有效,如果永久有效,可以修改/etc

后台守护进程实现coredump

只愿长相守 提交于 2019-12-09 17:23:59
1.在/etc/profile中加入以下一行,这将允许生成coredump文件 ulimit-c unlimited 2. 在rc.local中加入以下一行,这将使程序崩溃时生成的coredump文件位于/data/coredump/目录下: echo "/bin/esunny.tap/core.%e.%t.%p"> /proc/sys/kernel/core_pattern 注意rc.local在不同的环境,存储的目录可能不同,susu下可能在/etc/rc.d/rc.local 更多ulimit的命令使用,可以参考:http://baike.baidu.com/view/4832100.htm 这些需要有root权限, 在ubuntu下每次重新打开中断都需要重新输入上面的ulimit命令, 来设置core大小为无限. 不改变环境变量的命令,重启后不生效 ulimit -c unlimited echo "/bin/esunny.tap/core.%e.%t.%p" >/proc/sys/kernel/core_pattern cat /proc/sys/kernel/core_pattern 测试程序 int main() { daemon(0,0); char *p=NULL; *p="123" return 0; } 来源: oschina 链接: https://my

asp.net core合并压缩资源文件引发的学习之旅

浪子不回头ぞ 提交于 2019-12-09 13:53:25
原文: asp.net core合并压缩资源文件引发的学习之旅 0. 在asp.net core中使用BuildBundlerMinifier合并压缩资源文件 在asp.net mvc中可以使用Bundle来压缩合并css,js 不知道的见: http://www.cnblogs.com/morang/p/7207176.html 在asp.net core中则可以使用BuildBundlerMinifier来进行css,js的压缩合并 新建一个core项目可以看到一个根目录下面有一个 bundleconfig.json 配置文件,看名字大概也猜到了几分,点开json文件中的链接,果然就是它~ 官方文档地址: https://docs.microsoft.com/zh-cn/aspnet/core/client-side/bundling-and-minification 好的。接下来跟着文档试试看 1. 在vs中下载安装扩展 重启vs2017,卧槽。一遍又一遍无响应(家里公司电脑都没有成功~)..幸好还有其他路可以走... 2. 使用NuGet安装 BuildBundlerMinifier 使用命令 dotnet add package BuildBundlerMinifier 或者 NuGet包管理器安装完毕 重新生成项目 yes,成功,整个配置文件的配置一看就能明白

ASP.NET Core 资源打包与压缩

牧云@^-^@ 提交于 2019-12-09 12:45:07
原文: ASP.NET Core 资源打包与压缩 ASP.NET Core 资源打包与压缩 在ASP.NET 中可以使用打包与压缩来提高Web应用程序页面加载的性能。 打包是将多个文件(CSS,JS等资源文件)合并或打包到单个文件。文件合并可减少Web资源文件从服务器的所需请求数,这样可提高页面载入的性能。 压缩是将各种不同的代码进行优化,以减少请求资源文件的体积。压缩的常见方法删除不必要的空格和注释,并将变量名缩减为一个字符。 bundleconfig.json文件 [ { "outputFileName": "wwwroot/css/site.min.css", "inputFiles": [ "wwwroot/css/site.css" ] }, { "outputFileName": "wwwroot/js/site.min.js", "inputFiles": [ "wwwroot/js/site.js" ], "minify": { "enabled": true, "renameLocals": true }, "sourceMap": false } ] 配置选项详细说明: outputFileName 要输出打包包文件的路径。与bundleconfig.json文件的相对路径。必填 inputFiles 要打包的文件路径数组。 minify 输入出类型的压缩选项