如何防止 GDB 加载(大型)库的调试符号?
How to prevent GDB from loading debugging symbol for a (large) library?
在调试 Qt 5 应用程序时,有时我对 Qt 5 的内部结构不感兴趣,而是对应用程序本身的结构感兴趣。因此我不需要加载 Qt 5 库的所有调试符号,因为它们需要几秒钟才能加载。
是否可以阻止 GDB 加载这些 Qt 5 库的符号,同时保留我的应用程序的调试符号?
Is it possible to prevent GDB from loading symbols for these Qt 5 libraries while keeping the debugging symbols for my application?
是的。
正如 Richard Critten 的评论所提到的,设置 auto-solib-add
to 0
will prevent loading of symbols for all shared libraries, and you can then add files manually with the sharedlibrary
命令(接受正则表达式)。如果省略此正则表达式,则加载所有共享库。
然而,这将阻止自动加载 所有 符号(不仅仅是调试符号),并且还会阻止自动加载系统库的符号,这些符号通常需要展开堆栈。
更好的方法可能是在某处保存一份包含完整调试信息的 Qt5 库副本,例如~/Qt5-debug/
,然后在原始库上 运行 strip -g
。这样,您将获得所有库的符号信息,并且在极少数情况下,当您实际需要 Qt5 的完整调试信息时,您仍然可以使用 GDB file ~/Qt5-debug/libQt5Core.so.5.2
或类似命令来完成。
GDB 手册中的 GDB Files 章有更多关于使用此类单独调试符号的文档。
在调试 Qt 5 应用程序时,有时我对 Qt 5 的内部结构不感兴趣,而是对应用程序本身的结构感兴趣。因此我不需要加载 Qt 5 库的所有调试符号,因为它们需要几秒钟才能加载。
是否可以阻止 GDB 加载这些 Qt 5 库的符号,同时保留我的应用程序的调试符号?
Is it possible to prevent GDB from loading symbols for these Qt 5 libraries while keeping the debugging symbols for my application?
是的。
正如 Richard Critten 的评论所提到的,设置 auto-solib-add
to 0
will prevent loading of symbols for all shared libraries, and you can then add files manually with the sharedlibrary
命令(接受正则表达式)。如果省略此正则表达式,则加载所有共享库。
然而,这将阻止自动加载 所有 符号(不仅仅是调试符号),并且还会阻止自动加载系统库的符号,这些符号通常需要展开堆栈。
更好的方法可能是在某处保存一份包含完整调试信息的 Qt5 库副本,例如~/Qt5-debug/
,然后在原始库上 运行 strip -g
。这样,您将获得所有库的符号信息,并且在极少数情况下,当您实际需要 Qt5 的完整调试信息时,您仍然可以使用 GDB file ~/Qt5-debug/libQt5Core.so.5.2
或类似命令来完成。
GDB 手册中的 GDB Files 章有更多关于使用此类单独调试符号的文档。