C 如何跟踪或调试GMP?
我已经下载了GMP库5.02的源代码,为了最大程度地提高可调试性,我运行了:C 如何跟踪或调试GMP?,c,debugging,macros,trace,gmp,C,Debugging,Macros,Trace,Gmp,我已经下载了GMP库5.02的源代码,为了最大程度地提高可调试性,我运行了: ./configure --disable-shared --enable-assert --enable-alloca=debug --host=none CFLAGS=-g 并使用make进行编译,然后使用make install安装库。然后我像这样编译我的程序:gcc-lgmp-std=c99-g-c program.c,然后我运行:ltrace./a.out 然而,我意识到ltrace根本没有调用我可以在源代
./configure --disable-shared --enable-assert --enable-alloca=debug --host=none CFLAGS=-g
并使用make进行编译,然后使用make install安装库。然后我像这样编译我的程序:gcc-lgmp-std=c99-g-c program.c
,然后我运行:ltrace./a.out
然而,我意识到ltrace根本没有调用我可以在源代码中找到的TRACE()函数。我想跟踪trace()中的内容
我该怎么做呢?或者在GMP库中还有其他直接的调试方法吗?(我不知道如何使用gdb,它从未想过要进入gmp_printf)
谢谢
编辑:
我试图进一步调查,并意识到我不能修改GMP库,尽管我有来源。我插入了一个printf(“hello\n”)
在程序开始时调用的mpz_init2
函数的一开始,我重新编译了所有GMP(即使在make clean
之后),用make install
重新安装了库,然后我编译并启动了我的程序,但它从未打印“hello”。我还确保没有使用另一个已安装的GMP库(当我执行卸载时,我的程序无法编译,因为它找不到库)。尽管如此,我坚持gcc在GMP源文件夹中使用-L选项查找库
我不知道我做错了什么:(你对a.out的最终编译并没有生成一个静态链接的a.out可执行文件。因此,即使你说,在编译程序.c的过程中,编译器正在使用你的GMP库,但在运行时它在某处拾取一个共享库。你需要做两件事之一:
我认为#1实际上是您唯一的选择,因为您只构建了GMP的静态版本。对于#1,请确保在编译程序时明确提供-L/path/to/gmplib。c为什么要混合
--禁用共享--启用共享
?抱歉,这是一个打字错误。我重新编辑了这篇文章。谢谢!我对GMP库不太熟悉,但我能做什么您的意思是“不调用TRACE()
functions”?ltrace
显示可执行文件调用的库调用。是TRACE()
GMP中的一个lib函数,您的a.out
调用它?TRACE是一个宏,但我进一步研究了我的问题,并相应地重新编辑了我的文章。基本上,我最终完成了gcc程序。c-lgmp-L/path/to/GMP
,然后它就工作了。我能够在GMP库中执行printfs,重新编译并进行调试。然而,我我觉得这样做有点麻烦。它可以工作,但我想用gdb调试会更好。所以原来的问题解决了,因为您正在[Check mark for me!]中编译正确的GMP库查看您对GMP的编辑。现在您遇到了另一个调试器无法工作的问题?您是否使用带“-d”选项的GDB来告诉GDB在哪里搜索源代码文件?例如“GDB-d/path/to/gmpsrc a.out”