我在qt creator中调试linux应用程序。一切正常,但我无法在locals and expressions
视图中查看错误。
此外,我无法在qt创建者中调用gdb命令,p *__errno_location()
无效。我尝试添加一个临时变量来存储errno,但即使使用-O0
,temp变量也会进行优化。
在qt creator调试器中有没有其他方法可以查看errno?
答案 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