Linux core日志怎么打开,linux 下如何打开core dump文件开关

本文介绍了在Linux系统中如何开启core dump文件的生成,包括通过`ulimit`命令临时开启、修改`/etc/profile`实现永久开启,以及设置core dump文件的位置。通过生成的core文件,可以方便地分析程序崩溃的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

dump文件可以在程序crash时,方便我们查看程序crash的地方和上下文信息。在window下,要能生成dump文件,需要自己编写相应的代码。不过现在网上可以找到相应的代码,只要把它下载后然后加到自己的工程中去,就可以了!

在linux下面就简单的许多。只要打开相应的开关,linux会自动在程序crash时生成相应的core文件。这个文件和window下的dump文件类似。

下面是简单的一些步骤:

1.查看当前是否已经打开了此开关

通过命令:ulimit -c 如果输出为 0 ,则代表没有打开。如果为unlimited则已经打开了,就没必要在做打开。

2.通过命令打开

ulimit -c unlimited .然后通过步骤1,可以监测是否打开成功。

3.如果你要取消,很简单:ulimit -c 0 就可以了

通过上面的命令修改后,一般都只是对当前会话起作用,当你下次重新登录后,还是要重新输入上面的命令,所以很麻烦。我们可以把通过修改 /etc/profile文件 来使系统每次自动打开。

步骤如下:

1.首先打开/etc/profile文件

一般都可以在文件中找到 这句语句:ulimit -S -c 0 > /dev/null 2>&1.ok,根据上面的例子,我们只要把那个0 改为 unlimited 就ok了。然后保存退出。

2.通过source /etc/profile 使当期设置生效。

3.通过ulimit -c 查看下是否已经打开。

其实不光这个命令可以加入到/etc/profile文件中,一些其他我们需要每次登录都生效的都可以加入到此文件中,因为登录时linux都会加载此文件。比如一些环境变量的设置。

还有一种方法可以通过修改/etc/security/limits.conf文件来设置,这个方法没有试过,也是网上看到。不过上面两种就可以了!

最后说一下生成core dump文件的位置,默认位置与可执行程序在同一目录下,文件名是core.***,其中***是一个数字。core dump文件名的模式保存在/proc/sys/kernel/core_pattern中,缺省值是core。通过以下命令可以更改core dump文件的位置(如希望生成到/tmp/cores目录下)

echo “/tmp/cores/core” > /proc/sys/kernel/core_pattern

设置完以后我们可以做个测试,写个程序,产生一个异常。然后看到当前目录会有个core*的文件。然后我们可以

gdb core。*  程序  进行调试。

解决linux下不生成core dump文件

core dump的概念: A core dump is the recorded state of the working memory of a computer program at a spe ...

Linux下如何生成core dump 文件(解决segment fault段错误的问题)

Linux下的C程序常常会因为内存访问等原因造成segment fault(段错误),如果此时core dump 的功能是打开的,在运行我们的可执行程序时就会生成一个名为core的文件,然后我们就可以 ...

Linux使用笔记: 定制core dump文件的文件名

在开发过程中,当一个Linux程序异常退出时,我们可以通过core文件来分析它异常的详细原因.缺省情况下,Linux在程序异常时不产生core文件,要想让程序异常退出时产生core dump文件,需要 ...

【linux】linux下对java程序生成dump文件,并使用IBM Heap Analyzer进行分析,查找定位内存泄漏的问题代码

1.首先,java程序启动在linux,怎么生成dump文件? 1>第一步,首先你需要得到java程序的PID,最简单的方法使用如下命令 ps -ef|grep java 或者如果是docker ...

Linux下如何打开img镜像文件

有些镜像文件为IMG格式,在Linux如何打开呢?例如从微软dreampark下载的Windows Server 2008 R2镜像文件,使用file命令查看: $ file chs_windows_ ...

linux下生成core dump文件方法及设置【转】

转自:http://blog.youkuaiyun.com/mrjy1475726263/article/details/44116289 源自:http://andyniu.iteye.com/blog/196 ...

linux下生成core dump文件方法

core 文件的简单介绍 当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”).我们可以认为 co ...

Linux 下如何产生core文件(core dump设置)

转自:https://blog.youkuaiyun.com/star_xiong/article/details/43529637 今天在Linux下调试C程序时,出现段错误,习惯性的ls下当前目录,发现没有生 ...

linux下生成core dump文件方法及设置

linux下生成core dump文件方法及设置    from:http://www.cppblog.com/kongque/archive/2011/03/07/141262.html core ...

随机推荐

搭建TFS 2015 Build Agent环境(三)

在配置时,一定要注意下面的几个地方: 1.项目集合生成服务账号 中一定要包含: 2.Build Agent机器上防止Agent的路径一定要短,不要出现特殊字符,比如:C:\Agent 3.一定要安装V ...

Solr Cloud - SolrCloud

关于 Solr Cloud Zookeeper 入门,介绍 原理 原封不动转自 http://wiki.apache.org/solr/SolrCloud/ ,文章的内存有些过时,但是了解原理. Th ...

JavaScript高级程序设计笔记 事件冒泡和事件捕获

1.事件冒泡 要理解事件冒泡,就得先知道事件流.事件流描述的是从页面接收事件的顺序,比如如下的代码:

click me!
& ...

AspectJ基础学习之二搭建环境(转载)

AspectJ基础学习之二搭建环境(转载) 一.下载Aspectj以及AJDT 上一章已经列出了他的官方网站,自己上去download吧.AJDT是一个eclipse插件,开发aspectj必装,他可 ...

tomcat7 1000并发量配置 tomcat7配置优化

修改tomcat/conf/server.xml配置文件.

<think>我们正在讨论Linux内核驱动中的动态调试(dynamic debugging)功能。用户询问如何在Linux驱动中启用dev_info功能。 注意:dev_info是一个宏,用于在驱动中打印设备信息。默认情况下,这些消息可能不会全部显示在控制台上,因为内核有日志级别设置。 但是,用户可能想了解如何控制这些消息的打印,包括如何启用/禁用它们。这通常通过动态调试(dynamic debugging)或内核配置实现。 根据引用[1]:pr_debug、dev_dbg等动态调试。其中,对于命令`echo -n "file demo.c +p" > /sys/kernel/debug/dynamic_debug/control`,函数调用为:ddebug_proc_open ---> ddebug_proc_write [^1]。 这提示我们,动态调试机制可以控制pr_debug、dev_dbg等函数的输出。但是,用户问的是dev_info。 注意:dev_info通常使用dev_printk_emit(日志级别为KERN_INFO)打印消息,这些消息默认是启用的,会输出到控制台或日志文件(取决于系统配置)。但是,如果内核配置了动态调试,并且我们想对dev_info进行更细粒度的控制,可能需要考虑其他方法。 然而,实际上,dev_info消息通常总是被打印(只要日志级别允许,因为KERN_INFO的级别是6,而控制台默认级别是7,所以通常都会显示)。所以用户的问题可能是如何控制这些信息(比如在不需要的时候不打印)? 但用户明确说“启用”,所以可能是他们目前没有看到dev_info的输出?这可能有以下原因: 1. 内核日志级别设置过高,导致低于该级别的信息不显示。可以通过`dmesg -n 8`(设置控制台日志级别为8,即显示所有消息)来确保显示所有消息。 2. 驱动中的dev_info被条件编译关闭了?例如,使用#ifdef DEBUG等。 不过,在标准的驱动中,dev_info通常不会被条件编译关闭。所以更可能是日志级别的问题。 另外,动态调试(dynamic_debug)通常用于控制dev_dbg(以及pr_debug、print_hex_dump_debug等)的输出,而不是dev_info。因此,对于dev_info,我们通常不能像动态调试那样在运行时动态开关。 但是,我们可以通过以下方式控制内核消息的输出: - 调整控制台日志级别:通过`dmesg -n level`(level是一个从0到8的整数,8表示显示所有消息,0表示只显示紧急消息)或者修改/proc/sys/kernel/printk。 - 使用动态调试来控制dev_dbg:如果用户希望将一些信息消息改为使用dev_dbg打印,那么就可以利用动态调试在运行时启用或禁用。 如果用户确实想控制dev_info的输出,可能需要修改代码,将dev_info改为dev_dbg,然后使用动态调试来控制。 步骤: 1. 在驱动中,将需要动态控制的消息从dev_info改为dev_dbg。 2. 编译驱动时,确保定义了CONFIG_DYNAMIC_DEBUG(通常在现代内核中都是启用的)。 3. 在运行时,使用动态调试控制: 启用:`echo -n 'file <filename> +p' > /sys/kernel/debug/dynamic_debug/control` 禁用:`echo -n 'file <filename> -p' > /sys/kernel/debug/dynamic_debug/control` 注意:<filename>是包含dev_dbg调用的源文件名。 引用[1]中提到的命令就是用于动态调试的。 另外,引用[2]和[3]是关于USB设备驱动匹配的,与当前问题关系不大,因此我们主要参考引用[1]。 因此,回答用户: 1. 解释dev_info默认是启用的,但可能因为日志级别而看不到。 2. 如果希望动态控制,建议将信息改为dev_dbg,然后使用动态调试机制。 同时,生成相关问题。</think>### 如何在 Linux 驱动中启用 `dev_info` 功能 在 Linux 驱动开发中,`dev_info` 是设备信息打印的标准宏(定义于 `<linux/dev_printk.h>`),**默认处于启用状态**,无需特殊配置。其行为由以下因素控制: #### 1. **基本使用方式** 直接调用宏即可输出设备信息: ```c dev_info(&pdev->dev, "设备初始化成功,寄存器基址:0x%lx\n", reg_base); ``` - **输出位置**:内核日志缓冲区(通过 `dmesg` 查看) - **日志级别**:`KERN_INFO`(优先级 6),默认会被系统记录 --- #### 2. **控制输出可见性** 若未看到输出,需检查以下配置: - **内核日志级别** 通过 `/proc/sys/kernel/printk` 控制输出阈值: ```bash # 确保控制台日志级别允许 INFO 输出(默认值通常为 7) echo 8 > /proc/sys/kernel/printk # 启用所有级别日志 ``` - **系统日志服务** 检查 `rsyslog`/`journald` 是否过滤了内核日志。 --- #### 3. **动态调试进阶控制(替代方案)** 若需运行时动态开关消息,建议改用 `dev_dbg`: ```c // 驱动代码中 dev_dbg(&dev->pdev, "调试信息:当前状态=%d", state); ``` **启用步骤**: 1. 确保内核配置开启 `CONFIG_DYNAMIC_DEBUG=y` 2. 运行时激活调试: ```bash # 启用特定文件的 dev_dbg 输出 echo -n "file driver_core.c +p" > /sys/kernel/debug/dynamic_debug/control ``` `+p` 表示启用打印(`-p` 禁用),该机制通过修改函数指针实现动态控制[^1]。 --- #### 4. **设备匹配与日志关联** 当驱动与设备匹配时(如 USB 设备通过 `struct usb_device_id` 匹配[^2]),`dev_info` 常用于记录匹配成功事件: ```c static int my_probe(struct usb_interface *intf, const struct usb_device_id *id) { dev_info(&intf->dev, "设备匹配成功,ID=%04X:%04X\n", id->idVendor, id->idProduct); ... } ``` 匹配流程由总线层(如 `pci_bus_match`[^3])触发,无需额外日志启用操作。 --- ### 常见问题排查 | 现象 | 解决方案 | |---------------------|----------------------------------| | 无任何输出 | 检查日志级别、驱动是否成功加载 | | 仅缺 `dev_info` | 确认代码执行路径是否到达 | | 需动态开关 | 改用 `dev_dbg` + 动态调试机制 | > **关键总结**:`dev_info` 设计为"始终启用",若需精细控制请使用动态调试机制操作 `dev_dbg`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值