如何防止GDB为(大)库加载调试符号?

Lek*_*eyn 5 c++ qt gdb shared-libraries debug-symbols

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

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

Emp*_*ian 9

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

是.

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

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

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

本章GDB文件从GDB手册有关于使用这种单独调试符号更多的文档.