在运行C程序时,它说"(core dumped)"但我看不到当前路径下的任何文件.
我已经设置并验证了ulimit:
ulimit -c unlimited
ulimit -a
Run Code Online (Sandbox Code Playgroud)
我还试图找到一个名为"core"的文件,但没有得到核心转储文件?
任何帮助,我的核心文件在哪里?
我的程序运行如下:
exe -p param1 -i param2 -o param3
Run Code Online (Sandbox Code Playgroud)
它崩溃并生成了一个核心转储文件 core.pid
我想通过分析核心转储文件
gdb ./exe -p param1 -i param2 -o param3 core.pid
Run Code Online (Sandbox Code Playgroud)
但是gdb认识到core.pidgdb输入的参数.
在这种情况下如何分析核心转储文件?
所以我编写了偶尔崩溃的错误代码......并创建了一个stackdump文件.
使用addr2line我可以通过解码一个地址来弄清楚程序如何到达崩溃点.是否有替代工具可以使用堆栈转储简化调试?有没有办法在Insight/Gdb中加载此信息?
我想分析核心文件分析中的内存泄漏.
我编写了示例代码来注入内存泄漏并使用gcore命令生成核心文件.
#include <stdlib.h>
#include <unistd.h>
void fun()
{
int *ptr = new int(1234);
}
int main()
{
int i=0;
while(i++<2500)
{
fun();
}
sleep(360);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
找到进程ID
ayadav@ajay-PC:~$ ps -aef |grep over
ajay 8735 6016 0 12:57 pts/2 00:00:00 ./over
ayadav 8739 4659 0 12:57 pts/10 00:00:00 grep over
Run Code Online (Sandbox Code Playgroud)
并生成核心
ayadav@ajay-PC:~$ sudo gcore 8735
[sudo] password for ayadav:
0x00007fbb7dda99a0 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:81
81 ../sysdeps/unix/syscall-template.S: No such file or directory.
Saved corefile core.8735
Run Code Online (Sandbox Code Playgroud)
我已经从核心文件中找到了常见的模式,如下所示(在stackoverflow上建议另一个线程有没有办法找到进程的哪个部分使用了大部分内存,只查看生成的核心文件?)
ayadav@ajay-PC:~$ …Run Code Online (Sandbox Code Playgroud) 我遇到了有线分段故障.我正在使用Eclipse CDT在C中开发一个软件.当在终端上运行我的程序(Ubuntu 10,64bits)时,它只报告"分段错误".但是,当我在Eclipse中使用gdb进行调试时,它会结束并且结果是正确的.
我知道分段错误可能有很多原因.我很抱歉我无法显示我的代码,因为我不知道问题出在哪里......
但是有人可以帮助我吗,有没有可能发生的情况就像我的情况一样:终端上的分段故障,而调试时却很好?非常感谢.
谢谢,所有.我会花一些时间学习valgrind.我只是通过realloc()替换malloc()来修复bug.呼叫之后是两个memcpy.这是什么原因?这是代码段:
bwa_seq_t *merge_seq (bwa_seq_t *s1, bwa_seq_t *s2) {
ubyte_t *seq1, *seq2, *tmp;
if (!s1 || !s2)
return 0;
seq1 = s1->seq;
seq2 = s2->seq;
tmp = (ubyte_t*) calloc (sizeof(ubyte_t), (s2->len + s1->len + 1));
memcpy(tmp, seq1, sizeof(ubyte_t) * s1->len);
memcpy(&tmp[s1->len], seq2, sizeof(ubyte_t) * s2->len);
s1->len += s2->len;
tmp[s1->len] = '\0';
s1->seq = tmp;
return s1;
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙解释一下原因吗?
当我尝试运行它时,我收到了分段错误(核心转储).它完美编译,但我得到错误,我不知道为什么.我试图以所有可能的方式编辑我的代码,但我仍然收到此错误.我已经没有想法了.任何帮助都会很棒.谢谢!
unsigned short *reg = NULL;
int byte;
int i;
for (byte = 0; byte < num_bytes; byte++){
unsigned int next_byte = (unsigned int) message[byte];
crc_byte(reg, key, next_byte);
}
for (i = 0; i < 16; i++){
crc_bit(reg, key, 0);
}
return *reg;
}
Run Code Online (Sandbox Code Playgroud)