技术标签: C/C++ 调试 Linux LINUX linux 段错误
1、segment fault
segment fault是几乎多有C程序员都会碰到的问题,多为内存问题,因为glibc库中基本所有的函数都默认形参指针是非空的,这样以下原因就可能导致段错误:
(1)引用一个包含非法值的指针(当然包括空指针)。
(2)未得到正确的权限的时候进行访问,例如往只读的内存地址写数据。
(3)内存越界(数组越界,变量类型不一致等)
调试segment fault的几种常见方法:
(1) 打印log,这种方法的前提是你知道在哪行代码附近会出问题;
(2) gdb调试,对于小代码,可以逐行调试,大工程就比较头疼咯;
(3) core dump调试,当一个程序崩溃时,在进程当前工作目录的core文件中复制了该进程的存储图像。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。
首先,设置core大小
#设置core大小为无限
ulimit -c unlimited
#设置文件大小为无限
ulimit unlimited
使用core文件调试程序
看下面的例子:
/*core_dump_test.c*/
#include <stdio.h>
const char *str = "test";
void core_test(){
str[1] = 'T';
}
int main(){
core_test();
return 0;
}
编译:
gcc–g core_dump_test.c -o core_dump_test
如果需要调试程序的话,使用gcc编译时加上-g选项,这样调试core文件的时候比较容易找到错误的地方。
执行:
./core_dump_test
段错误
调式core文件
core文件是个二进制文件,需要用相应的工具来分析程序崩溃时的内存映像,在Linux下可以用GDB来调试core文件。
gdb core_dump_test core
Loaded symbols for /lib/ld-linux.so.2
#0 0x080482fd in core_test () at core_dump_test.c:7
7 str[1] = 'T';
(gdb) where
#0 0x080482fd in core_test () at core_dump_test.c:7
#1 0x08048317 in main () at core_dump_test.c:12
#2 0x42015574 in __libc_start_main () from /lib/tls/libc.so.6
GDB中键入where,就会看到程序崩溃时堆栈信息(当前函数之前的所有已调用函数的列表(包括当前函数),gdb只显示最近几个),我们很容易找到我们的程序在最后崩溃的时候调用了core_dump_test.c第7行的代码,导致程序崩溃。注意:在编译程序的时候要加入选项-g。您也可以试试其他命令, 如 fram、list等。更详细的用法,请查阅GDB文档。
今年的高考报名人数突破了千万,很多省市的报名人数都有所增加,高考录取的竞争也更加激烈了。当然,每个省市的情况不一样,大家要关注本地的政策。中国教育网站上有2020年各地高考一分一段表。考生根据成绩对照一分一段表,就可以知道自己在全省的排名,再参照各类学校各批次招生计划数,确定自己该如何填报志愿。一分一段表大部分都是以图的形式存在,但是也有少数省市的一分一段表数据是表格,可以直接爬取,如重庆,湖南等。我们就直接爬取重庆市的一分一段数据,看看重庆市2020年高考分数和录取情况,赶紧过来看吧。考生人_2020年重庆市的高考录取分数线
这题是挑战程序设计竞赛的例题,因为师兄讲了所以就补了做法:建图的方法是:加一个源点和汇点,讲饮料或食物分别连向源点、汇点,对于每一头牛,把它和它喜欢的食物和饮料连边,由于每一头牛在考虑的时候都是只能被一个边流入和流出(因为每一头牛都是只能吃一个食物喝一个饮料),所以把牛拆点(假如拆成牛1,牛2),就在牛1和牛2之间连一条边。然后源点到汇点跑一遍dinic就可以了。代码:#p...
目录 1.HTML/CSS/JavaScript先睹为快 2.HTML 3.CSS 4.JavaScript 1.1 HTML代码 未使用css,JavaScript的html网页 未使用css,JavaScript的html网页 这是一个未使用css,JavaScript的html网页 使用记事本即可编写HTML代码,扩展名是html或htm。...
文章目录KaliKali下载下载就很简单,找到要下载的仓库,复制链接,在 kali 里输入 git clone url 就会开始下载了, 上传在下载下来的仓库里打开终端,编辑完文件后,输入以下的几条命令即可,可以在 Gitee 上查看,..._kali 下载github
接口是一种特殊的类,它由全局变量和公共的抽象方法所组成。 接口的抽象方法必须定义为public的访问权限,如果方法定义省略了public,默认的权限是public,而不是default; 例:接口的定义interface A { public static final String username="jack"; public ab..._interface定义一个字符串
构造器初始化构造器初始化静态变量初始化非静态实例初始化对象创建过程构造器初始化先来看看下面这段代码:public class ConstructTest { private int n; public ConstructTest() { //通过构造器来初始化 n = 5; }}以上代码通过无参构造器来对全局变量 n 进行初始..._公共构造器 初始化方式
在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean注意:如果配置了那么标签就可以不用再xml中配置了,因为前者包含了后者。另外还提供了两个子标签1. 2. 在说明这两个子标签前,
前段时间大致整理了下virtIO后端驱动的工作模式以及原理,今天就从前端驱动的角度描述下目前Linux内核代码中的virtIO驱动是如何配合后端进行工作的。注:本节代码参考Linux 内核3.11.1代码virtIO驱动从架构上来讲可以分为两部分,一个是其作为PCI设备本身的驱动,此驱动需要提供一些基本的操作PCI设备本身的函数比如PCI设备的探测、删除、配置空间的设置和寄存器空间的读写等..._virtio前端驱动
pm.max_children=500pm.start_servers=280pm.min_spare_servers=50pm.max_spare_servers=500 把max_spare_servers设置为200后,服务器挂了一直502#,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理 。说是这个意思设置了200后关闭,服务器还出问题。。报错如下● php-fpm.s..._maxspareservers
集算报表 参数方案 自定义参数模板 参数模板 润乾_润乾参数模板的用法
linux dd命令刻录启动U盘详解dd命令做usb启动盘十分方便,只须:sudodd if=xxx.iso of=/dev/sdb bs=1M用以上命令前必须卸载u盘,sdb是你的u盘,bs=1M是块的大小,后面的数值大,写的速度相对块一点,但也不是无限的,我一般选2M,注意,执行命令后很块完成,但u盘还在闪,等不闪了,安全移除。注意:你的镜像需要支持dd命令。dd命令的解释
如果 c=>c.Is_Deleted==true sql语句 就是 is_deleted=truer_ef 判断null