2015-02-10 62 views
0

我有一個應用程序需要使用GDB/MI來獲取有關進程的信息。現在我正在設置一個斷點並運行該進程。通過使用「info locals」,我可以獲得當前幀中局部變量的整齊列表。雖然這很好,但我需要能夠看到全局變量是什麼。有沒有一種簡單的方法來查看GDB中的全局變量列表?

有沒有辦法做到這一點不是太痛苦?我可以使用「信息變量」並獲取所有變量的列表,這些變量的方式過於廣泛,可能會傷害我的應用程序的性能。有一種更簡單的方法來獲取全局變量列表嗎?

編輯:補充說我想使用GDB/MI。

回答

1

所以我找到了我想要做的解決方案。

我跟着這個答案here。然而,我發現當我運行答案中給出的命令時,我得到了一些不需要的垃圾(我在Mac上運行這個垃圾)。我通過刪除以.eh結尾的行來解決這個問題,並且我注意到其他行有以「__」開頭的行,所以我刪除了帶有「__」的行(這是兩個下劃線之前的空格)。我用以下來獲得正確的輸出:

g++ -O0 -c test.cpp && nm test.o | egrep ' [A-Z] ' | egrep -v ' [UTW] ' | egrep -v '.eh' | egrep -v ' __' 
1

根據GDB docsinfo variables將打印出在函數外定義的任何變量。這將包括您的全局變量和靜態變量。

如果您知道全局名稱,或者遵循特定的命名模式,您可以向GDB提供正則表達式以縮小範圍。

+0

不幸的是,這是我的問題。我不知道全局變量的名稱,我需要一些方法來找出它們是什麼。我可以從長長的靜態和全局變量列表中獲取輸出,並嘗試解析它們的起始位置(通過查找File:xxxx),但不幸的是性能是一個問題。 – 2015-02-10 04:04:18

+0

我沒有提到我正在使用GDB/MI,並且它看起來好像沒有與此命令等價的東西。 – 2015-02-10 04:07:23

+0

您可以通過MI模式運行所有「控制檯」命令,只需使用-interpreter-exec控制檯「命令」,如下所述:https://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Miscellaneous-Commands.html#% 2dinterpreter%2dexec – dbrank0 2015-02-10 09:50:32

相關問題