Articles of 核心

在Linux内核中,头包含错误

当我在内核的源代码中包含“asm / xen / hypercall.h”时, 我收到了这个错误信息。 我该如何解决? include/linux/stddef.h:8:16: error: expected identifier or '(' before 'void' #define NULL ((void *)0) ^ ./arch/x86/include/asm/alternative.h:221:28: note: in expansion of macro 'NULL' #define __parainstructions NULL ^ ./arch/x86/include/asm/paravirt_types.h:703:35: note: in expansion of macro '__parainstructions' extern struct paravirt_patch_site __parainstructions[], ^ include/linux/stddef.h:8:23: error: expected ')' before numeric constant #define NULL ((void *)0) ^ […]

GDB如何执行共享库的基址

我想了解GDB命令背后的内部工作。 在了解elf /共享库/地址空间随机化的初步作业之后,我试图理解GDB如何在可执行文件和核心文件之间做出合理的解释。 solib.c包含共享库处理的实现。 Esp对info sharedlibrary命令感兴趣。 对solib.c的评论是这样的。 /* Relocate the section binding addresses as recorded in the shared object's file by the base address to which the object was actually mapped. */ ops->relocate_section_addresses (so, p); 我从这个评论中了解不多。 有人能用简单的英语来解释我是如何搬迁的? 即每当一个可执行程序加载一个共享对象时,它将在某个位置加载X,而共享库中的所有符号将位于固定的偏移量处,比如X + Y,大小为Z.我的问题是, gdb如何执行相同的地址重定位范围,以便它与corefile中的加载段相匹配。 这是如何从可执行的提示。

R核心转储在哪里?

我的R会议与此坠毁: 在2015年1月6日11:29:24处理R分段错误(核心转储) 我在Ubuntu 13.10上运行R 3.1.2(是的,我需要升级)。 我不担心崩溃,但我想find核心转储。 它不在R工作目录中,它不在/var/crash或/var/cache ,不知道在哪里寻找。 编辑:my /proc/sys/kernel/core_pattern读取|/usr/share/apport/apport %p %s %c 。 apport没有手册页,但我可以谷歌,它看起来应该把核心写入/var/crash ,但它不在那里。 R可以重写默认的核心转储行为吗?

核心文件中的_kernel_vsyscall()

我的程序突然崩溃,并在核心文件中引发这个错误。 确切地说: Program terminated with signal 6, Aborted. #0 0x00c60410 in __kernel_vsyscall () #0 0x00c60410 in __kernel_vsyscall () #1 0x00444df0 in raise () from /lib/libc.so.6 #2 0x00446701 in abort () from /lib/libc.so.6 #3 0x0047d3ab in __libc_message () from /lib/libc.so.6 #4 0x004856c5 in _int_free () from /lib/libc.so.6 #5 0x00485b09 in free () from /lib/libc.so.6 这是相关的Linux或我在我的代码中犯了一个错误? 如何解决这个问题? […]

Linux核心转储是否有线程CPU使用信息

由于我对Linux和核心转储相当陌生,我不确定核心转储中存储了哪些信息。 这让我想知道是否有一个GDB命令来从一个核心转储文件检索线程的CPU%使用率。 就像从“顶部”命令中获得的CPU使用率一样。 也将很好地获得内存使用。 我正在改写之前发布的问题,以便更专注于我正在寻找的答案。 参考: 如何诊断在linux中咀嚼CPU的python进程 谢谢。

如果我只需要堆栈回溯,核心转储的最小大小是多less?

所有 我想减less我的核心转储文件的大小,但我真的想确保堆栈回溯仍然存在。 核心转储的最小尺寸是多less,以确保回溯到那里? 詹姆斯,非常感谢

GDB所做的核心转储包含了什么内容?

很明显,GDB可以通过它的包装器生成一个进程的核心转储,但是不清楚它包含了什么,并且很难find一个进程,因为不同的消息来源说完全不同的东西。 正因为如此,我有以下问题: 它是否包含整个过程的虚拟内存? 如果没有,它是什么部分? 所有可写的区域或堆栈只或(正如其名称所暗示的)一些重要部分或什么? 是否有可能通过GDB生成一个完整的进程内存的核心文件? 如果是这样,怎么样? 根据进程的内存映射和通过gcore命令自动生成的文件,通过保存和连接来自所有区域的内存生成的“dump”会有什么区别? 一个进程将某些数据写入RAM中。 我可以确定数据将被(总是)访问并保存在使用gcore命令生成的核心文件中吗? 如果没有,为什么? 它依赖于什么?

核心转储文件出现然后消失

我有一个相当大的内存占用大约30GB的程序,核心转储。 当程序正在转储(顶部显示为D – Defunct)时,转储文件是可见的和可读的。 它位于预期的目录中,具有预期的文件名格式。 一切都在本地磁盘上。 我甚至可以在gdb中加载文件。 很明显,转储需要几分钟的时间才能完成。 该文件起来大约13GB,然后过程退出…核心文件消失! 噗。 平台:Redhat EL6(2.6.32-220.4.2.el6.x86_64) 文件系统空间充足,超过500GB免费。 $ df . Filesystem 1K-blocks Used Available Use% Mounted on blahblahblah 834006872 270024424 521617316 35% /data ulimit没有显示任何适用的限制: $ ulimit -a core file size (blocks, -c) unlimited file size (blocks, -f) unlimited <snipped> 编辑:较小的核心转储不会消失。 包括这个相同的程序。 这似乎是特定于巨大的核心转储。 tune2fs 1.41.12 (17-May-2010) <snip> Block size: 4096 […]

核心转储文件名获取线程名称,而不是带有core_pattern%e。%p.core的可执行文件名称

我最近开始通过使用pthread_setname_np()在我的应用程序中设置一些线程名称。 这样做后,如果在一个命名线程中发生崩溃,则核心转储文件名将获得线程名称,而不是带有core_pattern%e的可执行文件名。%p.core 根据核心手册页 ,core_pattern中的%e标志应该被扩展为可执行文件名称。 它没有说任何有关线程名称。 我想要的可执行文件名称,而不是线程名称,因为我有其他自动化脚本(不由我维护),取决于以应用程序名称开头的核心文件名。 这是pthread_setname_np()或core_pattern中的错误? 我在Linux CentOS 6.7上运行。

Linux(MIPS):查看核心转储时暂时“更改”注册内容

在我的应用程序中的一些线程坐在优化function,当我debugging应用程序,gdb不能从这些function回溯。 但是我已经看过了汇编程序,并且可以通过执行以下操作来手动部分地将堆栈展开到前一个函数的框架: set $old_ra = $ra set $old_sp = $sp set $ra = *(unsigned long*)($sp+28) set $sp = $sp + 48 bt set $ra = $old_ra set $sp = $old_sp 如果我正在进行实时debugging,这完美地工作,它成功地显示一个完整的回溯。 我希望在查看核心转储时能够执行相同的离线操作。 显然,在一个核心转储中,戳一个寄存器的概念是毫无意义的,但是有没有办法告诉gdb“只用这个值作为寄存器”,所以我可以做一个类似的回溯?