Tag: coredump

在`libpmpi.12.dylib`中使用MPI_Barrier时出现分段错误

我使用brew install mpich ,但是如果我使用MPI_Barrier ,我会得到分段错误。 请参阅以下简单代码: // Ac #include “mpi.h” #include int main(int argc, char *argv[]) { int rank, nprocs; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&nprocs); MPI_Comm_rank(MPI_COMM_WORLD,&rank); MPI_Barrier(MPI_COMM_WORLD); printf(“Hello, world. I am %d of %d\n”, rank, nprocs);fflush(stdout); MPI_Finalize(); return 0; } mpicc Ac -g -O0 -o A 运行mpirun -n 2 ./A ,我收到以下错误: ================================================================================== = = BAD TERMINATION OF ONE […]

为什么Coredump文件不在这里生成?

我在这里有一个情况,几天前我能够在我的目标板上看到核心笨拙的文件,我通过在我的/etc/profile中添加“ulimit -c unlimited”来提供coredump生成支持。但是有人告诉我 这只会对从登录shell启动的程序产生影响,而不会对systemd启动的进程/服务产生影响,等等/限制将是设置这些默认设置的正确位置。 所以我更改了/ etc / limits文件并添加了“ulimit -c unlimited”行。但是现在我看不到Coredumped文件 我正在运行kill -9 $$来生成分段错误,它反过来会像之前那样生成coredump文件。 我们尝试更改“/ proc / sys / kernel / core_pattern”文件并明确地运行ulimit -c unlimited但它也没有运行 我们在哪里做错了?

Python服务器“Aborted(Core dumped)”

我使用web.py来创建Python Web服务器。 调用此服务器以解决线性编程问题,并使用库CBC来执行此操作。 每隔一段时间,服务器就会崩溃一个看起来像这样的日志: 78.243.184.3:56271 – – [03/Jun/2016 04:35:54] “HTTP/1.1 GET /optimization” – 200 OK Aborted (core dumped) 我相信“Aborted(core dumped)”是一个C错误,所以它来自web.py或CBC。 有没有办法追溯错误的来源?

OS X:在不降低流程的情况下生成核心转储?

我知道如何在进程崩溃时在OS X上生成核心转储,但我真正需要做的是附加到进程,生成核心转储,然后恢复该进程(不会杀死它)。 很久以前(也许是一年半前)我有C代码可以做到这一点…它使用OS X内核库连接到一个进程,读取它的所有线程状态和内存,并将其写入磁盘上的Mach-O文件。 这很好用(这正是我正在寻找的),但现在我似乎无法找到我的生活代码。 我似乎记得代码与OS X系统内部书籍有些相关,但这只是一个模糊的回忆。 有谁知道我正在谈论的代码,可以指出我吗? 如果不是,是否有人知道这样做的好方法最好是一些示例代码? 编辑:这是答案。 信息: http : //osxbook.com/book/bonus/chapter8/core/ 将为您完成的计划: http : //osxbook.com/book/bonus/chapter8/core/download/gcore-1.3.tar.gz

双重免费或腐败(fasttop)

我的代码的以下部分在执行* glibc检测时给出了这个消息./a.out:double free或corruption(fasttop):0x08e065d0 * * 我已经多次通过代码,但我不能清楚看到我如何滥用free (temp2) bool found= false; int x=0; for ( x=0; x<=312500; x++) { while (count num); temp->ptr=NULL; newNode = (NODE *)malloc(sizeof(NODE)); newNode->num=temp->num; newNode->ptr=NULL; if (first != NULL) { temp2=(NODE *)malloc(sizeof(NODE)); temp2=first; while (temp2 != NULL && !found) { if (temp2->num == newNode->num) {found=true;} temp2= temp2->ptr; } free(temp2); if (!found) { […]

使用fscanf读取指针时的分段错误(核心转储)

我正在尝试使用fscanf来读取和打印屏幕上的每个字符,但是当我运行程序时,我遇到了分段错误(核心转储)。 这是我的代码: #include main(int argc, char * argv[]) { int *a ; FILE *input; if (argc>=2) { input= fopen(argv[1],”r”); if (input!=NULL) { while (feof(input)==0) { fscanf(input,”%d\n”,a); printf(“%d\n”,*a); } fclose(input); } else { printf(“Error!\n”); } } } 我提供文件作为参数,如下所示: ./myprog input.txt 文件input.txt包含: 23 47 55 70

在简单的C代码中进行分段错误(核心转储)

我是C的新人。我指的是Brian W Kernighian和Dennis Ritchie所着的“C编程语言”一书。 本书中给出了一个指针增量和赋值的代码,如下所示。 #include int main() { char *s = “Goal”; char *t = “Home”; while(*s++ = *t++) printf(*s); return 0; } 使用该命令保存和编译代码 gcc ptr.c -o ptr -std=c99 现在通过运行命令运行代码 ./ptr 我收到以下错误 分段故障(核心转储) 错误似乎在while循环条件中。 但是代码与本书中给出的完全相同。 我错过了什么?

递归引起的分段错误

我正在编写一个程序,要取1-10之间的数字,并显示所有可能的方法来安排数字。 防爆输入:3输出: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 每当我输入9或10时,程序会产生分段错误并转储核心。 我相信问题是我的递归算法被调用了太多次。 有人可以帮助指出我如何限制所需的递归调用量吗? 这是我目前的代码: void rearange(int numbers[11], int index, int num, int fact) { int temp = numbers[index]; numbers[index] = numbers[index-1]; numbers[index-1] = temp; int i; for (i = 1; i 0) // If we […]

gdb奇怪的回溯

我的程序是用dietlibc静态编译的。 它是在ubuntu x64上编译的(使用-m32标志为x86编译)并在centos x86上运行。 编译后的大小只有大约100KB。 我用-ggdb3编译它,没有优化标志。 我的程序使用signal.h来处理SIGSEGV信号,然后调用abort()。 程序运行几天没有问题,但有时会出现段错误。 这是我得到奇怪的回溯,我不明白: username @ ubuntu:〜/ Desktop $ gdb -c core.28569 program-name GNU gdb(GDB)7.2 版权所有(C)2010 Free Software Foundation,Inc。 许可证GPLv3 +:GNU GPL版本3或更高版本 这是免费软件:您可以自由更改并重新分发它。 在法律允许的范围内,不提供任何担保。 输入“显示复制” 和“显示保修”的详细信息。 此GDB配置为“–host = x86_64-linux-gnu –target = i386-linux-gnu”。 有关错误报告说明,请参阅: … 从程序名中读取符号……完成。 [新主题28569] 核心由`program-name’生成。 程序终止,信号6,Aborted。 __kernel_vsyscall()中的#0 0x00914410 设置调试gdb的环境。 函数“internal_error”未定义。 在未来的共享库加载中使断点挂起? (y或[n])[回答N; 输入不是来自终端] 函数“info_command”未定义。 在未来的共享库加载中使断点挂起? (y或[n])[回答N; 输入不是来自终端] .gdbinit:8:源命令文件出错: […]

strcat()实现有效,但最后导致核心转储

我的strcat(char*, const char*)似乎工作,但它导致核心转储。 strcat()实现: char* strcat(char* dest, const char* src) { char* tmp = dest; while(*tmp) ++tmp ; while( (*tmp++ = *src++ ) != ‘\0’) ; return (dest); } int main()中的代码,我调用strcat(): char arr3[] = “Mr. “; char arr4[] = “Smith”; printf(“Hello %s!”, strcat(arr3, arr4)); 它实际上连接了两个字符串并将其打印出来但仍然导致了核心转储。 输出: 你好先生史密斯!中止(核心倾倒) 我做错了什么?