【发布时间】:2019-01-15 20:55:34
【问题描述】:
总的来说,我在 gdb 和调试共享对象方面的经验有限,所以我想知道是否有人可以对我所看到的行为有所了解。
基本上,我试图了解一个文档记录不佳的库的内部结构。为此,我编写了一个程序,最大限度地减少了对库的使用,并尝试逐步了解它发生了什么。
问题是在gdb中使用“step”命令几次后,程序执行了不止一条指令。我相信这一点的一个原因是,最终 gdb 表明已经启动了三个线程,但是我在代码中的任何地方都看不到为什么会发生这种情况。
过去我曾尝试使用调试符号重建库,但这似乎并没有让我更进一步。我什至不确定这是否相关,因为我认为 gbd 仍然可以在没有调试符号的情况下单步执行指令(即使没有调试符号也意味着它会给我更少的信息)。
如果相关:我正在调试一个我编写的 3 行程序,该程序动态链接到感兴趣的库。我有这个库的源代码,但它很复杂,所以我希望 gdb 能对事情有所了解。
提前致谢!
【问题讨论】:
-
您使用了哪些优化选项?优化得越多,调试器就越难使用。
-
您是否尝试在 gdb 中逐步执行优化的 C++ 代码?那会非常混乱。
-
@Shawn 查看相关库的构建脚本会发现,将其 DEBUG 参数设置为“true”意味着使用了 -O0。
-
@Shawn 没关系!我没有正确使用构建脚本。我刚刚重建并适当地设置了调试选项,所以现在优化似乎已经关闭。
-
如果有人想发布有关优化的答案,我会将其标记为正确。非常感谢!
标签: c++ gdb shared-objects