2009-12-10 65 views
3

有沒有辦法在運行時將枚舉的值映射到名稱? (我正在用GCC構建。)將枚舉值映射到C++中的字符串

我知道GDB可以做到這一點,我願意使用一些不可移植的東西,並用調試數據分解。


編輯:我在尋找一種不需要修改原始枚舉聲明不是手複製所有值出的映射功能的解決方案。我已經知道如何做到這一點。

有效;我想要一個函數,它在格式化運行時枚舉值時執行GDB所做的任何操作。

+0

這裏嘗試http://stackoverflow.com/questions/207976/how-to-easily-map啓動-c-enums-to-strings和這裏http://stackoverflow.com/questions/201593/is-there-a-simple-script-to-convert-c-enum-to-string#201792 – 2009-12-10 21:46:27

+0

有趣的忽略停止單詞和後綴都只是標題匹配中的一個單詞,第一個鏈接,它仍然沒有顯示在自動搜索.... – BCS 2009-12-10 21:50:12

+0

Igor Oks:th引用的問題/答案似乎圍繞着交替枚舉減速風格或手工生成的函數。我已經有了一個可以通過這種解決方案工作的解決方案。 – BCS 2009-12-10 21:59:11

回答

1

如果您不想投入時間來利用GCC的符號信息,gcc-xml會以可重用的XML格式(包括枚舉名稱)爲您提供有關C++源代碼的信息。

簡單的例子...這個來源:

enum E { 
    e1 = 1, 
    e2 = 42 
}; 

變爲:

<GCC_XML> 
    <!-- ... --> 
    <Enumeration name="E"> 
    <EnumValue name="e1" init="1"/> 
    <EnumValue name="e2" init="42"/> 
    </Enumeration> 
    <!-- ... --> 
</GCC_XML> 
+0

加上XSLT和我的一些樂趣,我應該能夠編碼我想要的功能。呸。 – BCS 2011-03-29 15:24:25

0

這可能對你有幫助:

The "stabs" debug format

+0

這對那些寫我要找的圖書館的人很有用。 – BCS 2009-12-10 21:56:49

+3

當您提供鏈接時,請給出鏈接到的內容的一個句子摘要(至少)。 – 2009-12-10 23:01:06

3

如果你有韌性,你可以創建一個工具,將解析源文件枚舉,生成翻譯功能,並將它們添加到源代碼。隨着更多的精力,你可以爲編輯器編寫插件,比如Eclipse和Emacs,這些插件將爲你執行此操作。

也許它可以在Perl腳本中完成?

+1

在之前的工作中,我們有一個相當全面的系統來定義枚舉中的所有返回碼和一個Perl腳本,將它們拉出並創建一個可編譯的字符串文件,以便在發生錯誤時可以打印它們。現在我可能會使用Python,但Perl已經完成了這項工作。 – 2009-12-10 23:13:43