如何在 Linux 的 QTCreator 中使用 dlopen 打开的共享库中设置断点

Posted

技术标签:

【中文标题】如何在 Linux 的 QTCreator 中使用 dlopen 打开的共享库中设置断点【英文标题】:How to set a breakpoint in a shared library opened with dlopen in QTCreator in Linux 【发布时间】:2013-12-03 05:58:50 【问题描述】:

我正在尝试使用 QTCreator 调试我的共享库,该共享库被 dlopen 和 dlsym 调用。 QT 调试器不会在共享库中的断点处停止。

当我使用 GDB 运行我的应用程序时,它可以正常工作。

SO 有调试符号。

如何让 QTCreator 调试我的应用程序?

谢谢。

更新:

我创建了一个包含项目完整路径的 gdb 启动脚本,现在它可以工作了。 问题是,我不希望这个脚本为每个使用 QT 的项目运行。

每个项目都可以这样做吗?

【问题讨论】:

我正在尝试解决同样的问题。您能否分享有关您的解决方案的更多详细信息?你找到“正确”的方法了吗? 【参考方案1】:

GDB 似乎无法找到您的 .so 文件。您应该检查this post 以查看是否可以在您的solib-search-path 中找到共享库。如果不是,您应该扩展 Tools/Options/Debugger/GDB 中的“Additional Startup Commands”字段,如下所示:

set solib-search-path %CurrentProject:BuildPath/<relative path to the folder where the .so file was built>

在我的情况下,在 android 下工作,我设置了 set solib-search-path %CurrentProject:BuildPath/android-build/libs/armeabi-v7a,现在如果在共享库代码中设置断点,则可以工作。

@ChrisF:试图将 Debugging a dynamically-loaded library in c++ with QtCreator 标记为此问题的重复项,但我必须等待获得支持(*** 不允许我标记重复项,因为“此问题没有支持或接受的答案“……”

【讨论】:

以上是关于如何在 Linux 的 QTCreator 中使用 dlopen 打开的共享库中设置断点的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Fedora29 Linux 上设置 git 以与 QtCreator 一起使用?

如何在 Windows 上使用 QtCreator 为 Linux 构建和调试应用程序?

如何使用 qtcreator 链接到 Arch Linux 上的 yaml-cpp?

如何在 Linux 上运行 qtcreator?安装了 2 个版本

如何在 Mint Linux 中配置 QT creator

如何使用 qtcreator 通过 ninja 构建系统远程部署应用程序