我们能否使 GDB 在回溯中显示非平凡的参数
can we make GDB display non trivial arguments in backtrace
目前GDB在回溯中只打印琐碎的参数(仅标量(;如下所示
(gdb) bt 1
(gdb) function1(this=this@entry=0xfff6c20, x1=-1, x2=3, x3=...
这里的 x3 可以是数组/STL 向量,默认情况下 GDB 不显示它。
我在代码中使用了很多 STL 向量和 Blitz 数组。
我在 .gdbinit 文件中有例程来显示 STL 向量,在 c++ 中有子例程,我可以在其中使用 GDB 中的调用功能,它可以显示数组内容。要手动打印矢量/数组内容,我会使用
(gdb) printVector vector_name -> this is a routine in my .gdbinit
(gdb) call printBlitzArray(array_name) -> this is a routine inside my executable itself.
我们如何使 GDB 显示如下所示的函数的非平凡参数。
void myFunc(int x1, int x2, std::vector<int> x3, blitz::Array<bool, 1> x4)
我知道使用设置打印框架参数都可以显示一些重要的参数。 但是如何真正打印参数,其中 GDB 可能没有本机支持打印它们。 目的是在函数开始时自动打印所有参数(至少是我们可以打印的参数(。
我可以编写一个 GDB 脚本并为每个向量/数组单独添加打印,但为每个函数执行此操作将非常耗时,因为我有大量函数。这将大大有助于加速我的调试。
任何建议都非常感谢。
提前非常感谢!
我刚刚在自己的机器上对此进行了测试,编译时使用-rdynamic
。-rdynamic
标志基本上为所有符号(不仅仅是动态符号或外部依赖符号(制作一个额外的副本到可执行文件的动态符号表中,从而允许它们在程序运行时加载到内存中,而不是简单地由链接器用作一些元数据,这为任何回溯机制提供了完全名称损坏的符号,并允许将其解析为原始函数(没有实际名称(函数参数,只是类型(,希望这有帮助!:)
相关文章:
- 在模板中显示参数的类型
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- 实例化模板时,我是否必须显式显示参数包中的类型?
- 引入参数化构造函数后显示 LNK 2019 未解析外部符号的代码错误
- 我们能否使 GDB 在回溯中显示非平凡的参数
- C++如何在类Vector中显示不同类型的参数
- isPalindrome不显示输出,isPalindrome函数未使用字符串输入作为字符串参数进行测试
- 当通过引用传递 QObject 时,C++信号的参数在 QML 中显示为"未定义"
- 为什么显示错误:参数太少而无法正常工作
- 按值传递的参数在 Visual Studio 2010, C++ 的调试器中显示为通过引用传递
- 为什么在类构造函数方法中,std::string 参数在调试时显示不同的结果?
- 值传递的参数在 Visual Studio 2015 x64 调试器中显示不正确
- 为什么当我有两个函数时编译器没有显示错误,一个将采用基类,一个将派生类作为参数
- CreateProcess正在调用cmd.exe,包括没有显示(闪烁)窗口的参数
- mpi_scatterv中的显示参数是什么?
- 如何使 Clang Complete 显示函数参数
- 如何在VS2010Ultimate中编写和显示C++参数信息
- c++ Glut 显示需要调用我的绘制函数,但我无法传递任何参数
- 显示带有多个参数的QmessageBox
- 将SO_BROADCAST设置为套接字失败,并显示"参数无效"