草庐IT

Coredump

全部标签

linux - 无法为我崩溃的程序创建核心文件

我使用的是Ubuntu12.04LTS。我写了一个简单的程序如下来制造崩溃//null.c#includeintmain(){int*p=NULL;intk=*p;printf("%d",sizeof(0));return0;}现在我用“gcc-gnull.c”运行然后是“./a.out”,输出符合预期。Segmentationfault(coredumped)现在我想使用gdb查看核心转储文件。我做了以下事情我检查了当前目录,没有核心转储文件我尝试用内容“core.%e.%p”更改/proc/sys/kernel/core_pattern。但我无法写入文件。它说“Fsync失败”。我

Linux:处理段错误并获取核心转储

当我的应用程序因段错误而崩溃时,我想从系统中获取核心转储。我通过预先配置来做到这一点ulimit-cunlimited我还希望在我的应用程序日志中显示出现段错误的指示。我通过使用sigaction()来做到这一点.但是,如果我这样做,信号不会达到其默认处理,并且不会保存核心转储。如何让系统核心同时从我自己的信号处理程序中转储日志行? 最佳答案 覆盖SIGSEGV的默认信号处理程序以调用您的自定义日志记录函数。记录后,恢复并触发将创建核心转储的默认处理程序。这是一个使用signal的示例程序:voidsighandler(intsig

Linux:处理段错误并获取核心转储

当我的应用程序因段错误而崩溃时,我想从系统中获取核心转储。我通过预先配置来做到这一点ulimit-cunlimited我还希望在我的应用程序日志中显示出现段错误的指示。我通过使用sigaction()来做到这一点.但是,如果我这样做,信号不会达到其默认处理,并且不会保存核心转储。如何让系统核心同时从我自己的信号处理程序中转储日志行? 最佳答案 覆盖SIGSEGV的默认信号处理程序以调用您的自定义日志记录函数。记录后,恢复并触发将创建核心转储的默认处理程序。这是一个使用signal的示例程序:voidsighandler(intsig

c++ - c++ 程序核心转储的回溯中的无限中止()

我有一个奇怪的问题,我无法解决。请帮忙!该程序是一个在ARMLinux机器上运行的多线程C++应用程序。最近我开始对其进行长期测试,有时它会在1-2天后崩溃,如下所示:***glibcdetected**/root/client/my_program:free():invalidpointer:0x002a9408***当我打开核心转储时,我看到主线程似乎有一个损坏的堆栈:我只能看到无限的abort()调用。GNUgdb(GDB)7.3...ThisGDBwasconfiguredas"--host=i686--target=arm-linux".[NewLWP706][NewLWP7

c++ - c++ 程序核心转储的回溯中的无限中止()

我有一个奇怪的问题,我无法解决。请帮忙!该程序是一个在ARMLinux机器上运行的多线程C++应用程序。最近我开始对其进行长期测试,有时它会在1-2天后崩溃,如下所示:***glibcdetected**/root/client/my_program:free():invalidpointer:0x002a9408***当我打开核心转储时,我看到主线程似乎有一个损坏的堆栈:我只能看到无限的abort()调用。GNUgdb(GDB)7.3...ThisGDBwasconfiguredas"--host=i686--target=arm-linux".[NewLWP706][NewLWP7

c - 删除 root 权限并仍然生成核心转储

我注意到我的一些用户在崩溃后根本没有得到核心转储,即使他们配置中的其他一切似乎都是正确的。看完core(5)手册页很多次我注意到了这一点:[Acoredumpfileisnotproducedif]Theprocessisexecutingaset-user-ID(set-group-ID)programthatisownedbyauser(group)otherthantherealuser(group)IDoftheprocess.我的守护进程不是setuidroot,但在很多配置中它以root身份启动,如果.conf文件指定了用户名,它会放弃权限,通常的组合是:setgid(gi

c - 删除 root 权限并仍然生成核心转储

我注意到我的一些用户在崩溃后根本没有得到核心转储,即使他们配置中的其他一切似乎都是正确的。看完core(5)手册页很多次我注意到了这一点:[Acoredumpfileisnotproducedif]Theprocessisexecutingaset-user-ID(set-group-ID)programthatisownedbyauser(group)otherthantherealuser(group)IDoftheprocess.我的守护进程不是setuidroot,但在很多配置中它以root身份启动,如果.conf文件指定了用户名,它会放弃权限,通常的组合是:setgid(gi

核心文件大小限制对进程具有不确定性影响

我正在运行自定义2.6.27内核,我刚刚注意到在段错误期间生成的核心文件大于为进程设置的硬核文件大小限制。更奇怪的是,核心文件只是有时被截断(但没有达到ulimit设置的限制)。例如,这是我将在下面尝试并崩溃的程序:intmain(intargc,char**argv){//Getthehardandsoftlimitfromcommandlinestructrlimitnew={atoi(argv[1]),atoi(argv[1])};//Createsomememorysoastobeefupthecorefilesizevoid*p=malloc(10*1024*1024);if

核心文件大小限制对进程具有不确定性影响

我正在运行自定义2.6.27内核,我刚刚注意到在段错误期间生成的核心文件大于为进程设置的硬核文件大小限制。更奇怪的是,核心文件只是有时被截断(但没有达到ulimit设置的限制)。例如,这是我将在下面尝试并崩溃的程序:intmain(intargc,char**argv){//Getthehardandsoftlimitfromcommandlinestructrlimitnew={atoi(argv[1]),atoi(argv[1])};//Createsomememorysoastobeefupthecorefilesizevoid*p=malloc(10*1024*1024);if

linux - 为什么会生成核心转储文件?

有时当我运行我的代码时,当我通过Ctrl+\终止程序时会生成核心转储文件。文件名的格式为core.*。程序没有突然终止,也没有段错误。我相信它是SIGQUIT而不是SIGABRT或SIGSEGV。如果我尝试Ctrl+C或Ctrl+Z,则它不会生成。谁能说出为什么它只在按下Ctrl+\时生成?如何避免生成此核心转储文件?核心转储文件有什么用吗? 最佳答案 当一个进程由于程序错误而被操作系统终止时,它会转储核心。发生这种情况的最典型原因是因为程序访问了无效的指针值。鉴于您有零星的转储,很可能您使用的是未初始化的指针。您可以发布导致错误的