如何在qt creator中查看errno?

时间:2015-10-14 14:57:36

标签: qt gdb

我在qt creator中调试linux应用程序。一切正常,但我无法在locals and expressions视图中查看错误。

此外,我无法在qt创建者中调用gdb命令,p *__errno_location()无效。我尝试添加一个临时变量来存储errno,但即使使用-O0,temp变量也会进行优化。

在qt creator调试器中有没有其他方法可以查看errno?

1 个答案:

答案 0 :(得分:1)

errno很有趣,因为它是一个本地线程。在gdb中评估errno或任何本地线程需要一些调试信息 - 尽管如此,IIRC,至少Fedora带有一个特殊的gdb补丁,让errno评估工作时无需调试信息。

在我的机器上(Fedora 22),我没有glibc调试信息,但它有效:

(gdb) p errno
$1 = 2

所以,也许你的发行版没有这个特殊的补丁 - 在这种情况下安装glibc调试信息应该有效。

关于__errno_location - 首先,好好试试!它应该工作。但是,如果您没有调试信息,请查看gdb对函数类型的看法:

(gdb) p __errno_location
$2 = {<text variable, no debug info>} 0x3297420920 <__errno_location>
(gdb) ptype __errno_location
type = int ()

也就是说,gdb认为它返回int!这是一个长期的gdb奇怪,在K&amp; R时代有一些意义,但现在只是一种时代错误。

调用此函数当然会产生废话:

(gdb) p __errno_location()
$3 = -134416752

如果在调用之前强制转换函数,则可以得到正确的答案:

(gdb) p * ((int*(*)(void)) __errno_location)()
$4 = 2