2015-10-14 50 views
0

我在qt創建器中調試linux應用程序。一切正常,除非我在locals and expressions視圖中看不到errno。如何在qt創建者中查看errno?

此外,我無法在qt創建者中調用gdb命令,p *__errno_location()不起作用。我嘗試添加一個臨時變量來存儲errno,但即使使用-O0,臨時變量也會進行優化。

是否有任何其他方式來查看qt創建器調試器內的errno?

回答

0

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 
+0

但我想知道如何在qt中查看它。 – Jichao

+0

對不起。安裝glibc debuginfo。 –