繁体   English   中英

附加到 gdb 会中断并且不会继续该过程

[英]Attaching to gdb interupts and won't continue the process

有一些大型实时项目需要处理(多进程(IPC),简而言之就是多一切)。

我的工作流程是作为 Linux 上的服务启动的。 我有root访问权限。

这是问题所在:

我正在尝试附加到正在运行的 proc,尝试通过/使用 gdb 启动它,但结果是一样的:一旦我用 gdb“触摸”它,它就会停止可执行文件,或者有时它会抛出:

Program received signal SIGUSR1, User defined signal 1. [Switching to Thread 0x7f9fe869f700 (LWP 2638)]

当然,从那里什么也做不了。

试过:

  1. 无间断处理所有
  2. 附加到作为服务(守护程序)启动或作为常规 proc 启动
  3. 从 gdb 开始
  4. 认为可能是分叉/多线程问题 - 在最开始的睡眠中实现 10 秒 - 用“继续”附加到它

伙计们,我想要的只是调试,命中断点等。

请帮忙。 分享意见。

编辑实际命令:

1) gdb 附加 myProcId。 然后在阅读符号后,我点击“c”,结果:

程序收到信号 SIGUSR1,用户定义的信号 1。 [切换到线程 0x7f9fe869f700 (LWP 2638)] 0x00007f9fec09bf73 in select () from /lib64/libc.so.6

2)如果我让第一行在代码中休眠 10 秒,附加到进程,点击“c”,结果:它运行,显示信息线程,主要的回溯,但从不命中断点(确保代码在那里运行- 如果我在那里更改代码,我会得到日志和不同的行为),这意味着进程被卡住了。

3)所有其他组合,如gdb path/to/my/proc参数列表,然后开始。 其中 arg 列表使用不同的相关选项 gdb 给了我们。

也许值得一提:处理网络数据包相关,也驱动定时器。 但对我来说,重要的是当前的中断快照,我不在乎计时器到期后系统会发生什么。

既然您提到您正在调试一个多处理程序,我认为您拥有的底层程序是在正确的子进程中设置断点。

尝试break forkset follow-fork-mode child/parent 您想要实现的是将 gdb 附加到运行您要调试的代码的进程。 请参阅此链接

另一个想法是产生崩溃,因为您可以编译程序。 例如添加一个int i = *(int*)NULL ,这将生成一个核心转储。 然后,您可以使用gdb <program> <core dump>调试核心转储。 您可以参考此页面了解如何配置核心转储。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM