我们能否使GDB在回溯中显示非平凡的参数

问题描述 投票:1回答:1

[目前,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)

我知道使用set print frame-arguments all可以显示一些非平凡的参数。但是如何在GDB可能没有本地支持打印参数的地方真正打印参数。目的是在函数开始时自动打印所有参数(无论如何,请尽可能打印)。

我可以编写一个GDB脚本并为每个向量/数组分别添加打印,但是对每个功能执行此操作将非常耗时,因为我有大量的功能。这对加速我的调试很有帮助。

任何建议都值得赞赏。

非常感谢!

c++ stl gdb blitz++
1个回答
-1
投票

我刚刚在自己的机器上进行了测试,编译时使用-rdynamic-rdynamic标志基本上将所有符号(不仅是动态符号或从外部依赖的符号)额外复制到可执行文件的动态符号表中,从而使它们可以在程序运行时加载到您的内存中,而不是简单地使用通过您的链接器作为一些元数据,它可以为任何回溯机制提供完全名称混用的符号,并允许将其解析为原始函数(没有函数参数的实际名称,仅输入类型),希望对您有所帮助! :)

© www.soinside.com 2019 - 2024. All rights reserved.