我已经下载了GMP库5.02的来源,以及 - 如建议here最大可调试 - 我跑:如何跟踪或调试GMP?
./configure --disable-shared --enable-assert --enable-alloca=debug --host=none CFLAGS=-g
和使用make编译,然后安装了使图书馆安装。然后我编译我的程序是这样的:gcc -lgmp -std=c99 -g -c program.c
然后我跑了:ltrace ./a.out
但是我意识到ltrace根本就不能调用我可以在源代码中找到的TRACE()函数。我想追踪TRACE()中的内容。
我应该怎么做?还是有任何其他直接的方法在GMP库内进行调试? (我无法弄清楚如何用gdb做它,它从来不想进入gmp_printf)
谢谢。
编辑: 我试图进一步调查,并意识到我不能修改GMP库,虽然我有源。我在mpz_init2
函数的开头插入了一个printf("hello\n");
,我在程序开始时调用了该函数,我重新编译了所有GMP(即使在make clean
之后)重新安装了该库,然后编译并启动了我的程序,但是它从不打印“你好”。我也确定,我没有使用另一个安装的GMP库(当我做make uninstall
我的程序无法编译,因为它找不到库)。不过,我坚持要求gcc使用-L选项在GMP源文件夹中查找库。
我不知道我做错了什么:(
为什么要混合使用'--disable-shared --enable-shared'? – Eregrith 2012-04-24 08:20:22
对不起,这是一个错字。我重新编辑了这篇文章。谢谢! – 2012-04-24 08:23:24
我对GMP库不太熟悉,但是你是不是在调用TRACE()函数呢? 'ltrace'显示你的可执行程序调用的库调用。 TRACE()是GMP中的一个lib函数,你的'a.out'调用了吗? – 2012-04-24 09:18:24