所以我给了下面一大块代码并告诉他们有三个错误。好的,这很棒。我要使用" 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;
}
答案 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的完整介绍超出了本答案的范围。