实际上,这并不需要 IDE 或者 gdb 为标准库类型做单独的开洞处理,我们自己定义的类型也可以实现,这就是 gdb 的 pretty printer 技术。 这个技术顾名思义,就是用漂亮、优雅、直观的方式向我们去展示程序的内部数据,从而帮助我们更好地去理解程序的行为、更高效快速的 debug。这个理念与《高效 C/C++ 调试》一书...
在找到对应的printer之后,会(print_string_repr函数中)调用printer的"to_string"方法,然后(在print_children函数中)调用printer的children接口。 ///gdb-10.1\gdb\python\py-prettyprint.cenumext_lang_rcgdbpy_apply_val_pretty_printer(conststructextension_language_defn *extlang,structvalue *value,structui_file...
打开.gdbinit文件,并添加以下内容: 在上述代码中,你需要根据你的实际需求编写MyPrettyPrinter类的to_string方法,该方法用于定义如何漂亮打印特定类型的数据。 保存并关闭.gdbinit文件。 现在,你可以使用gdb调试你的C++程序,并在命令列表中启用漂亮打印机。在终端中输入以下命令启动gdb调试会话: 现在,你可以使用gdb...
classMyPrinter:def__init__(self,val):self.val=valdefto_string(self):return”name:{}integer:{}".format(self.val['mName'], self.val['mI'] 判断一个value,是否需要使用自己定义的打印类 deflookup_pretty_printer(val):ifval.type.code==gdb.TYPE_CODE_PTR:returnNone# to addif'MyStruct'==val...
gdb pretty printer 官方文档见gdb python 扩展, gdb 中 python 的可玩性很高(毕竟光是gdb都可以玩光追了,加上Python那还不得上天),这里只介绍 pretty printer 相关的一些细节 首先是官方的一个小 demo '''struct foo { int a, b; };struct bar { struct foo x, y; };'''importgdbclassfooPrinter:"...
首先将连接里面的3个py文件保存到~/.gdb/qt5prettyprints目录下,其中kde.py可以不用。然后将gdbinit文件保存为~/.gdbinit。需要稍微改下这个文件: python #新增下面两行 importsys, os sys.path.insert(0,"/home/a/.gdb/qt5prettyprinters") ...
obj.pretty_printers.append(pretty_printer_lookup) 使用: gdb a.out,在return 处断点; 执行gdb命令: print mybook (gdb) p mybook $1 = {v1=10, v2=20} 3. 参考资料 https://sourceware.org/gdb/onlinedocs/gdb/Writing-a-Pretty_002dPrinter.html ...
结合第二节的信息和报错信息,可以看到,python/gdb/printing.py中也加载了同名pretty-printer:libstdc++-v6 因此,将该printing.py删除,然后在.gdbinit中导入下载好的printers.py,重新启动gdb 发现pretty-printers加载正常 参考链接 gcc与libstdc++版本对应关系
gdb 报错 "Undefined info command: 'pretty-printer'" 通常表示你使用的 gdb 版本不支持或未启用 pretty-printer 命令。这可能是因为 gdb 的版本...
那么我使用以下命令看下是否gdb启动的时候加载了这个pretty-printer。可以打印的机器会输出下列: 我在一台不可以打印的机器就输出。 所以这里我们需要找到系统的printers.py的路径,并使用source加载它。在centos7找到了printers.py所在位置。 ⋊> /d/r/l/ws locate printers.py ...