Gdb 漂亮的打印机帮助:对象没有属性

Gdb 漂亮的打印机帮助:对象没有属性,gdb,Gdb,我正在写我的第一台漂亮的打印机,有点麻烦。我的gdb是7.7 这是我喜欢调试的C++代码: enum Country { CHINA, USA }; class Foo { public: Foo(int _v, enum Country c) {v = _v; m_country = c;} ~Foo() { v = -1; } int v; enum Country m_country; }; int mai

我正在写我的第一台漂亮的打印机,有点麻烦。我的gdb是7.7

这是我喜欢调试的C++代码:

enum Country
{
    CHINA,
    USA
};

class Foo
{
   public:
       Foo(int _v, enum Country c) {v = _v; m_country = c;}
       ~Foo() { v = -1; }

       int v;
       enum Country m_country;
};

int main()
{
    Foo f(10, CHINA);

    return 0;
}
这是我的打印机:

import gdb 

class FooPrinter:
    def __init__(self, val):
        self.v = val

    def to_string(self):
        # because v is integer, a simpler way is:
        # return self.v['v']
        v = "v=" + str(self.v['v'])

        f = self.m_country['m_country']
        if (f == 0):
            c = "CHINA"
        elif (f == 1):                                                                                                                                                                       
            c = "USA"                                                                                                                                                                        
        else:                                                                                                                                                                                
            c = "unknown"

        c = "c=" + c

        ret = v + '\n' + c

        return ret


def lookup_type (val):
    if str(val.type) == 'Foo':
        return FooPrinter(val)
    return None

gdb.pretty_printers.append (lookup_type)
在gdb中运行打印机时,出现以下错误:

(gdb) source printer.py 
(gdb) p f
Python Exception <class 'AttributeError'> 'FooPrinter' object has no attribute 'm_country': 
(gdb)source printer.py
(gdb)p f
Python异常“FooPrinter”对象没有属性“m_country”:

我想我需要以某种方式修改
\uuuu init\uuu
以获得一个额外的国家/地区参数,但如果是这样,我应该如何更新代码的其余部分?

问题是这一行:

    f = self.m_country['m_country']
在这里,我想您应该检查一下self.v:

    f = self.v['m_country']

请注意,还可以从枚举类型获取所有枚举常量名称。因此,您可以使用更简单的查找替换链接的
if
。如果枚举大于两个常量,这很好。

问题是这行:

    f = self.m_country['m_country']
在这里,我想您应该检查一下self.v:

    f = self.v['m_country']
请注意,还可以从枚举类型获取所有枚举常量名称。因此,您可以使用更简单的查找替换链接的
if
。如果枚举大于两个常量,这很好