2012-05-18 69 views
3

我試圖找出errno的更改時間。在gdb上設置errno的觀察點

起初,我嘗試「看錯誤號」在gdb,這導致了錯誤

Cannot find thread-local variables on this target 

我能夠用「-pthread」編譯解決這個問題。然而,它仍然不起作用,我現在得到錯誤

Cannot find shared library `/usr/lib/debug/lib/x86_64-linux-gnu/libc-2.13.so' in dynamic linker's load module list 

當我輸入「watch errno」。我需要做什麼以便在errno上設置一個觀察點?

回答

3

errno不再是一個靜態變量。下面是它如何出現用戶態(從我的本地/usr/include/x86_64-linux-gnu/bits/errno.h)在Linux上的應用程序:

# define errno (*__errno_location()) 

這是每個線程得到錯誤狀態。

+2

謝謝,我現在在我的程序中添加了「int * errno_p = __errno_location()」作爲main的第一條語句,現在可以使用「watch * errno_p」來檢測errno何時更改。直接使用「watch * __ errno_location()」由於某種原因不起作用。功能上的觀察點不允許嗎?可能它被禁止,因爲當它們有副作用時它會導致錯誤的行爲。 –