我使用gdb调试器来打印ZZ类型的变量值。此数据类型在Number Theory Library or NTL中定义。当我使用“print x”找出我变量的值时,我得到类似这样的东西:
print x
$1 = {rep=0xab2cc54}.
我想这是我的ZZ对象的地址。我该如何打印它的价值?我应该提一下,我不知道这堂课的内部表现。
我可以将NTL与Eclipse之类的编译器一起使用来调试我的应用程序吗?
答案 0 :(得分:1)
我可以在Eclipse等编译器中使用NTL吗?
首先:Eclipse不是编译器,而是为您封装编译器和调试工具的IDE。
在调试模式下,IDE能够解析源代码中使用的实际类型和内部表示,并让您逐步完成。
那就是说我很确定你可以使用Eclipse CDT来检查你的特定类型值。
答案 1 :(得分:1)
...我的ZZ对象。我该如何打印它的价值?
这有点难看,但有效:
(gdb) call NTL::operator<<(std::ostream&, NTL::ZZ const&)(cerr, x)
42$1 = (std::ostream &) @0x620020: <incomplete type>
(在此示例中,变量x
的值为42
)
如果您不想在值之后使用垃圾,则可以转换为void
:
(gdb) call (void)NTL::operator<<(std::ostream&, NTL::ZZ const&)(cerr, x)
42(gdb)
(但请注意,在该值之后没有换行符。)
如果您不是using namespace std
,则可能需要撰写
(gdb) call NTL::operator<<(std::ostream&, NTL::ZZ const&)('std::cerr', x)
有时cerr
可能不在范围内:
(gdb) call NTL::operator<<(std::ostream&, NTL::ZZ const&)(cerr, x)
No symbol "cerr" in current context.
- 然后你可以试试cout
,但它变得更加丑陋,因为必须刷新缓冲的输出:
(gdb) call NTL::operator<<(std::ostream&, NTL::ZZ const&)(cout, x)
(gdb) call 'std::basic_ostream<char, std::char_traits<char>>& std::operator<< <std::char_traits<char>>(std::basic_ostream<char, std::char_traits<char>>&, char const*)'(&cout, "\n")
42