【问题标题】:How to prevent GDB from loading debugging symbol for a (large) library?如何防止 GDB 为(大型)库加载调试符号?
【发布时间】:2015-10-24 03:56:07
【问题描述】:

在调试 Qt 5 应用程序时,我有时对 Qt 5 的内部结构不感兴趣,而对应用程序本身的结构感兴趣。因此我不需要加载 Qt 5 库的所有调试符号,因为加载这些符号需要几秒钟。

是否可以阻止 GDB 为这些 Qt 5 库加载符号,同时为我的应用程序保留调试符号?

【问题讨论】:

标签: c++ qt gdb shared-libraries debug-symbols


【解决方案1】:

是否可以阻止 GDB 为这些 Qt 5 库加载符号,同时为我的应用程序保留调试符号?

是的。

正如 Richard Critten 的评论所提到的,将 auto-solib-add 设置为 0 将阻止为 all 共享库加载符号,然后您可以使用 sharedlibrary 命令手动添加文件(该命令接受一个正则表达式)。如果省略此正则表达式,则加载所有共享库。

然而,这会阻止自动加载所有符号(不仅仅是调试符号),并且还会阻止自动加载系统库的符号,这通常是展开堆栈所必需的。

更好的方法可能是在某处保存带有完整调试信息的 Qt5 库的副本,例如~/Qt5-debug/,然后在原始库上运行 strip -g。这样,您将获得所有库的符号信息,并且在极少数情况下,当您确实需要 Qt5 的完整调试信息时,您仍然可以使用 GDB file ~/Qt5-debug/libQt5Core.so.5.2 或类似命令来完成。

GDB 手册中的 GDB Files 章节有更多关于使用这种单独的调试符号的文档。

【讨论】:

  • 谢谢橡皮鸭!发布此问题后不久,我在 GDB 手册中找到了相关部分,希望您不介意我添加它们:-)
  • 非常感谢!!!在 Raspberry 上开始调试 Qt 应用程序需要很长时间。使用此选项启动 gdb 会立即发生。
  • 您也可以将此确切命令添加到 ~/.gdbinit 以使其永久化。
  • 如何防止库加载共享库正则表达式
  • @PMat 指定一个与您不想加载的库不匹配的正则表达式?
猜你喜欢
  • 2015-07-28
  • 2016-07-22
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多