Gdb 漂亮的打印机帮助:对象没有属性
我正在写我的第一台漂亮的打印机,有点麻烦。我的gdb是7.7Gdb 漂亮的打印机帮助:对象没有属性,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
这是我喜欢调试的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
。如果枚举大于两个常量,这很好