如何将 gdb 附加到 docker 容器中运行的进程?

2024-04-04

我在 docker 容器中有一个长时间运行的进程,我想将 gdb 附加到该进程以查看正在运行的线程并获取堆栈跟踪。我可以从主机附加到进程,但无法解析任何符号,因为可执行文件位于文件系统中的不同位置(位于 docker 安装的卷中),并且共享系统库都卡在 docker 文件系统映像中/var/lib/docker 中的某处。

我能够生成一个核心文件并使用 gdb 通过指定可执行文件的主机路径来查看它,但是由于系统库都位于错误的位置并且加载到核心文件中的错误位置,所以我没有得到从中得到的信息。

我是否有任何我忽略的选择?


您可以使用以下方式附加到流程gdb通过附加到正在运行的容器来在容器中运行实例lxc-附加.

Note:gdb 必须已安装在该容器中,否则您必须安装它。

# find your container ID
sudo docker ps
# list of your containers - container ID is 1234567890
# find your full container ID
sudo docker ps --no-trunc -q| grep <short ID>
sudo lxc-attach -n <container long ID>

root@1234567890:/#
# optionally, you can install gdb now if it is not installed
# yum install gdb

root@1234567890:/# gdb
...
(gdb) attach 1

2017-04 更新:

现在可以使用 docker exec 更简单的工作流程(感谢@42n4)。

# find your container ID
sudo docker ps
# list of your containers - container ID is 1234567890
docker exec -i -t 1234567890 /bin/bash

root@1234567890:/#
# optionally, you can install gdb now if it is not installed
# yum install gdb

root@1234567890:/# gdb
...
(gdb) attach 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 gdb 附加到 docker 容器中运行的进程? 的相关文章

随机推荐

  • 如何使用javascript检查客户端系统中是否安装了特定软件?

    是否可以使用Javascript检测客户端系统是否安装了特定的Windows应用程序 我开发了一个网站 该网站必须检测仅由我们开发的应用程序 但我想让你知道 网站名称和 Windows 应用程序名称是不同的 我的意思是考虑我的网络应用程序名
  • Python:string.uppercase 与 string.ascii_uppercase

    这可能是一个愚蠢的问题 但我不明白字符串模块中 string uppercase 和 string ascii uppercase 之间有什么区别 打印两个函数的文档字符串会打印相同的内容 甚至输出print string uppercas
  • 在一次搜索中搜索 LDAP 上的用户和关联组

    LDAP 新手 我们的 LDAP 的排列方式是 人员 和 组 人们拥有姓名 uid 和邮件等用户信息 这些组具有组名称和多个成员字段 其值如 cn First Last cn people dc comic dc com 列出了该组成员的人
  • 在其声明之上调用函数

    void foo bar error bar has not been declared void bar namespace N void foo N bar error bar is not a member of N void bar
  • Visual Studio Code:.git 文件夹/文件隐藏

    我现在正在尝试 Visual Studio Code 关于 Visual Studio Code 的所有内容对我来说都非常酷 除了一件事 git 文件夹 文件隐藏在 Visual Studio Code 中 我经常通过修改 git配置文件
  • 如何在不复制粘贴的情况下以相同的方式扩展两个类?

    我写了一个楼主画的TabControl 但是我们的项目也使用了TabWorkspace其源自TabControl 此刻 我有 public class OurTabControl TabControl some code that over
  • 如何在窗口栏中获取菜单?

    我想知道如何在窗口栏中获取菜单 就像 Visual Studio 一样 如果能够在左侧显示 文件 编辑 等按钮 在右侧显示标准的 最小化 最大化 和 关闭 按钮 那就太好了 这是可能吗 我尝试过设置Window WindowStyle No
  • Android Intent Data Uri 查询参数

    我正在尝试使用如下意图启动我的应用程序 adb shell am start a android intent action VIEW d my scheme my host queryParam1 QueryParam1 queryPar
  • Xcode 8 无法导出 Ad Hoc 发行版的存档版本

    当我尝试在 Xcode 8 中导出存档应用程序以进行临时分发时 我收到一条错误消息 有没有匹配的配置文件 and 现有的配置文件缺乏应用程序标识符和钥匙串访问组权利 有什么问题吗 我怎样才能让它发挥作用 我尝试在开发人员会员中心生成临时分发
  • CoreData 和 mergeChangesFromContextDidSaveNotification

    我正在创建一个addingManagedObjectContext 作为新实体的便笺簿区域 然后在 保存 时将新实体合并到我的主 ManagedObjectContext 中 类似于 CoreDataBooks 示例中的显示方式 合并新实体
  • AWS Amplify Graphql 对 @connection 的查询

    我正在使用 AWS Amplify 前端使用 Cli 和 Angular 7 进行 Graphql AppSync 并且想知道当超过 10 个项目时如何获取所有连接的项目 假设我创建了一个这样的 schema graphql type Us
  • 为什么这个 Lua 优化 hack 会提高性能?

    我正在寻找一个描述提高 Lua 性能的各种技术的文档 http www lua org gems sample pdf脚本代码 我很震惊竟然需要这样的技巧 虽然我引用的是 Lua 但我在 Javascript 中也见过类似的 hack 为什
  • 仅重写 URL 的中间部分 - mod rewrite .htaccess

    我想改变cadeaushopurl 中的部分hobby cadeau shop 我在 htaccess 文件中进行了以下 mod 重写 RewriteRule cadeaushop http www zovyo nl hobby cadea
  • 如何在控制器中控制页面路由?

    OnsenUI 很棒 快速又简单 然而 关于控制器中控制温泉逻辑的文档并不多 例如 我想在控制器内执行 location path newpath 泡温泉是怎样做的 我尝试了 ons navigator pushPage partials
  • FFmpeg:如何估计音频流中的样本数量?

    我目前正在编写一个小型应用程序 它利用 FFmpeg 库来解码 C 中的音频文件 尤其是 avformat 和 swresample 现在我需要音频流中的样本总数 我知道确切的数字只能通过实际解码所有帧才能找到 我只需要一个估计 这里的首选
  • MouseListener 被多次调用

    我使用此代码来获取作为 jLable 图标放置的图像的 X 和 Y 坐标 对此的答案建议了这种获取坐标的方法question https stackoverflow com questions 19977589 how to get x y
  • HashMap 可串行化

    HashMap实现了Serialized接口 所以可以序列化 我查看了 HashMap 的实现 并且 Entry 表被标记为瞬态 由于Entry 表是存储Map全部内容的表 如果不能序列化 那么反序列化时Map是如何构造回来的 如果你看来源
  • Matplotlib 3D绘图zorder问题

    我有一个由蓝色表面组成的图 通过绘制plot surface 和一个红色球体 通过绘制scatter 曲面的 zorder 设置为 0 球体的 zorder 设置为 1 尽管不设置任何 zorder 值会产生相同的结果 You can se
  • 如何使用 Rails 和 Paperclip 将照片存储在 Google Cloud Storage 上?

    到目前为止 我一直使用 Amazon S3 来存储用户的文件 这里需要做的就是 指定存储桶的 Amazon S3 凭证 add aws sdk gem 到 Gemfile 并在模型中 has attached file avatar sty
  • 如何将 gdb 附加到 docker 容器中运行的进程?

    我在 docker 容器中有一个长时间运行的进程 我想将 gdb 附加到该进程以查看正在运行的线程并获取堆栈跟踪 我可以从主机附加到进程 但无法解析任何符号 因为可执行文件位于文件系统中的不同位置 位于 docker 安装的卷中 并且共享系