簡體   English   中英

如何避免GDB中符號的名稱空間前綴?

[英]How to avoid namespace prefix for symbols in GDB?

我正在使用C ++庫。 該庫使用多個名稱空間。 調試時,我必須在每個符號名稱前加上名稱空間前綴。 它會導致很多額外的工作和打字。

C ++具有using namespace X概念,可以更輕松地使符號可用(大量手動放棄)。 我在GDB中尋找類似的東西。 例如,我想要b Foo::bar而不是b MyLibNamespace::Foo::bar b Foo::bar

GDB似乎沒有與命名空間相關的幫助,但我可能做錯了:

(gdb) help namespace
Undefined command: "namespace".  Try "help".
(gdb) namespace help
Undefined command: "namespace".  Try "help".

我如何告訴GDB使用名稱空間前綴,所以我不必為每個符號名稱提供它?

我如何告訴GDB使用名稱空間前綴,所以我不必為每個符號名稱提供它?

目前的GDB似乎沒有任何此類支持(截至2017-08-13)。

您可以使用Python腳本來實現它來定義新命令。 文檔

當心,這完全是非平凡的主張。

我如何告訴GDB使用名稱空間前綴,所以我不必為每個符號名稱提供它?

你可以考慮一個解決方法......

我(有時)在我的類定義文件中添加了一個或多個(C ++)函數。 (.cc),但他們不是班級的一部分。

它們不是應用程序的一部分,並且在您完成它們時會被無害地刪除。

它們通常“轉儲”信息(名稱為d1(),d2()等)

但是它們幾乎可以做任何對調試工作有用的事情。通常情況下,你不會提前考慮這個特定的測試工作。

所以,你的編輯/編譯/鏈接迭代很簡單:停止gdb,打開文件,添加一個有用的函數,行,並恢復gdb。 保持這個'診斷'代碼簡單。 希望結果最終能節省時間。

我目前找不到任何示例(在我的文件中)。 我想,一旦克服了特定的挑戰,我就會迅速放棄這些功能。


無論如何...這個演示只是在幾分鍾前工作...

當我在類Foo_t附近的gdb中工作,命名空間DTB的一部分等時,我創建的d1知道如何訪問Foo_t的特定實例(以某種方便的方式),並且可以輕松地轉儲實例的當前狀態這樣做的Foo方法。 也許d1看起來像這樣:

void d1() { objDer.f("xxx"); } // a derived instance,
//                             the class has a long complex name.

現在,在gdb中,當該實例存在時運行到斷點並初始化,並使用gdb print命令運行d1 ...

(gdb) p d1()

這是一個簡短的 gdb命令來獲取實例並運行一個方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM