我在qt創建器中調試linux應用程序。一切正常,除非我在locals and expressions
視圖中看不到errno。如何在qt創建者中查看errno?
此外,我無法在qt創建者中調用gdb命令,p *__errno_location()
不起作用。我嘗試添加一個臨時變量來存儲errno,但即使使用-O0
,臨時變量也會進行優化。
是否有任何其他方式來查看qt創建器調試器內的errno?
我在qt創建器中調試linux應用程序。一切正常,除非我在locals and expressions
視圖中看不到errno。如何在qt創建者中查看errno?
此外,我無法在qt創建者中調用gdb命令,p *__errno_location()
不起作用。我嘗試添加一個臨時變量來存儲errno,但即使使用-O0
,臨時變量也會進行優化。
是否有任何其他方式來查看qt創建器調試器內的errno?
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怪異,這在R天有所幫助,但現在這只是一個不合時宜的事情。
調用此函數的產量當然廢話:
(gdb) p __errno_location()
$3 = -134416752
如果在調用之前投的功能,你可以得到正確的答案:
(gdb) p * ((int*(*)(void)) __errno_location)()
$4 = 2
但我想知道如何在qt中查看它。 – Jichao
對不起。安裝glibc debuginfo。 –