我剛剛轉移到Ubuntu和新使用gdb和g ++。如果我的問題很愚蠢,請原諒我。gdb沒有給出錯誤的完整描述
這是來自Richard Stevens高級Linux編程。三個文件倒數 main.c
文件夾的名稱創建:
#include <stdio.h>
#include "reciprocal.hpp"
int main (int argc, char **argv)
{
int i;
i = atoi (argv[1]);
printf ("The reciprocal of %d is %g\n", i, reciprocal (i));
return 0;
}
reciprocal.cpp
:
#include <cassert>
#include "reciprocal.hpp"
double reciprocal (int i) {
// I should be non-zero.
assert (i != 0);
return 1.0/i;
}
reciprocal.hpp
:
#ifdef __cplusplus
extern "C" {
#endif
extern double reciprocal (int i);
#ifdef __cplusplus
}
#endif
編譯後,我跑了命令(gdb) reciprocal
和(gdb) run
。我期待的東西在書中
Starting program: reciprocal
Program received signal SIGSEGV, Segmentation fault.
__strtol_internal (nptr=0x0, endptr=0x0, base=10, group=0)
at strtol.c:287
287 strtol.c: No such file or directory.
(gdb)
但我得到:
Starting program: /home/trafalgar/Desktop/reciprocal/reciprocal
warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7ffff7ffa000
Program received signal SIGSEGV , Segmentation fault.
0x00007ffff7a56ad4 in ??() from /lib/x86_64-linux-gnu/libc.so.6
什麼可能發生的不同。這是版本問題還是其他問題?
這裏是Makefile中
reciprocal: main.o reciprocal.o
g++ $(CFLAGS) -o reciprocal main.o reciprocal.o
main.o: main.c reciprocal.hpp
gcc $(CFLAGS) -c main.c
reciprocal.o: reciprocal.cpp reciprocal.hpp
g++ $(CFLAGS) -c reciprocal.cpp
clean:
rm -f *.o reciprocal
我想在冗長的設置會幫助,但它仍然是給相同的輸出 – AbKDs
前的調試工作(在二進制文件調試信息)。你的代碼不起作用。 –
用'rm -v * .o recpirocal'清理。重新編譯所有的源代碼。向我們展示您的編譯命令。再次啓動調試器。 –