实际上,这并不需要 IDE 或者 gdb 为标准库类型做单独的开洞处理,我们自己定义的类型也可以实现,这就是 gdb 的 pretty printer 技术。 这个技术顾名思义,就是用漂亮、优雅、直观的方式向我们去展示程序的内部数据,从而帮助我们更好地去理解程序的行为、更高效快速的 debug。这个理念与《高效 C/C++ 调试》一书...
///gdb-10.1\gdb\python\py-prettyprint.cenumext_lang_rcgdbpy_apply_val_pretty_printer(conststructextension_language_defn *extlang,structvalue *value,structui_file *stream,intrecurse,conststructvalue_print_options *options,conststructlanguage_defn *language){structtype*type=value_type (value);struct...
gdb 报错"Undefined info command: 'pretty-printer'" 通常表示你使用的 gdb 版本不支持或未启用 pretty-printer 命令。这可能是因为 gdb 的版本较旧,或者安装的 gdb 不包含该功能。 以下是解决这个问题的一些方法: 1. 升级gdb 确保你使用的是最新版本的 gdb,因为较旧的版本可能不支持 pretty-printer。你可以...
gdb是一款用于调试程序的强大工具,可以帮助开发人员定位和修复代码中的错误。在使用gdb调试C++程序时,可以通过启用漂亮打印机(pretty-printer)来改善调试体验。 漂亮打印机是gdb的...
gdb.printing.register_pretty_printer(gdb.current_objfile(),lookup_pretty_printer,replace=True) 将下面的程序编译,并测试 structMyStruct{std::stringmName;std::map<int,std::string>mField1;std::set<std::string>mField2;intmI;intmj;};intmain(){MyStructs={std::string("student"),lm,ls,3,4...
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 ...
info pretty-printers # 可查看已加载的pretty-printer gdb的数据目录 gdb中,有一个设置记录了数据目录data-directory showdata-direcotry#查看数据目录位置 数据目录的内容如下,其中python目录下保存得是,gdb启动时自动加载的Python脚本 参考链接 STLSupport - GDB Wiki(看这个即可) ...
那么我使用以下命令看下是否gdb启动的时候加载了这个pretty-printer。可以打印的机器会输出下列: 我在一台不可以打印的机器就输出。 所以这里我们需要找到系统的printers.py的路径,并使用source加载它。在centos7找到了printers.py所在位置。 ⋊> /d/r/l/ws locate printers.py ...
注册Pretty-Printer 接下来是向gdb注册我们自定义的pprinter: def lookup_buffer(val): """val是一个gdb.Value的实例,通过type属性来获取它的类型。 如果类型为Buffer,那么就使用自定义的BufferPrinter。 """ if str(val.type) == 'Buffer': return BufferPrinter(val) ...
to_string方法返回结构体的字符串表示,而children方法返回一个元组列表,描述了结构体的子字段。然后,我们使用gdb.printing.register_pretty_printer函数将这个打印机注册到gdb中。 现在,当你使用gdb调试包含MyStruct的程序时,gdb将能够使用你定义的美化打印机来显示MyStruct的内容。