运行时出现分段错误,但调试成功

Joy*_*Joy 5 c segmentation-fault

我遇到了有线分段故障.我正在使用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)

有人可以帮忙解释一下原因吗?

Lau*_*nt' 10

请尝试以下步骤:

  • 输入ulimit -c unlimitedxterm(这允许创建core/postmorterm文件)

  • 启动程序(让它崩溃):核心文件现在应该出现在目录中.

  • 使用启动调试器 gdb <yourprogram> <corefile>

  • 类型bt在gdb的提示,看它做了什么行崩溃.

  • (可选)纠正错误.

  • 呃,是的 但这个答案对我来说似乎更全面. (2认同)

jpa*_*cek 6

如果您知道如何从终端崩溃它,您可以创建一个核心文件并检查它崩溃的点,如下所示:

$ ulimit -c unlimited   # to create a corefile
$ yourprogram
...
crash                   # this will create file "core" in the current directory
$ gdb yourprogram core  # shows the state at the moment of the crash
Run Code Online (Sandbox Code Playgroud)

关于该主题的问题: