使用GDB确定代码错误

时间:2014-06-09 21:41:14

标签: c debugging gdb

所以我给了下面一大块代码并告诉他们有三个错误。好的,这很棒。我要使用" Core"文件和gdb来查看代码。

然而,我很难理解我在看什么。我告诉我使用命令运行gdb:

gdb print_test core

但我实际上并不知道"核心"在那之后,论证会做什么或做什么。我对gdb的了解遗憾地局限于绝对基础。我们非常感谢任何建议。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "natural.h"


/* This program is a test driver for arbitrary precision addition.  It expects
 * two integers expressed in hex as command-line arguments.  Naturals, however,
 * are read from streams.  Libc has a memory stream.  These look like file
 * streams, but they actually "read" from the strings.  This lets us read two
 * natural numbers, add them together, and display the results.  There is a
 * little bookkeeping at the end to free or release the memory used by the
 * natural numbers.  These would be destructors or finalizers in C++ or Java.
 */
int main(int argc, char* argv[])
{
   natural_t l,r,s;
   FILE* fmem;

   if (argc != 3)  {
  fprintf(stderr, "Usage: %s {hexdigits} {hexdigits}\n", argv[0]);
      return EXIT_FAILURE;
   }

   fmem = fmemopen(argv[1], strlen(argv[1]), "r");
   l = read_natural(fmem);
   fclose(fmem);

   fmem = fmemopen(argv[2], strlen(argv[2]), "r");
   r = read_natural(fmem);
   fclose(fmem);

   s = add_naturals(l,r);

   print_natural(stdout, s);
   printf("\n");

   release_natural (&l);
   release_natural (&r);
   release_natural (&s);

   return EXIT_SUCCESS;
}

1 个答案:

答案 0 :(得分:2)

您还应该有一个名为&#34; core&#34;的文件。这是一个核心转储,可选择在程序崩溃时生成(如果ulimit核心转储大小设置为非零)。这实际上是程序崩溃时工作内存的快照,因此可以通过事后调试器进行检查,这是您在这里使用GDB的。

GDB由gdb [program] [core_dump]运行,因此通过运行gdb print_test core,您可以在程序&#34; print_test&#34;上运行GDB,并使用核心转储&#34;核心&#34 ;.从这里,您可以像正常一样使用gdb。第一个停靠点是运行&#34;回溯&#34;命令确定程序崩溃的位置,并使用&#34; print&#34;命令打印出变量的内容。从这里开始,您需要查找GDB手册以获取更多信息,因为对GDB的完整介绍超出了本答案的范围。