gdb是如何连接到多线程进程的
How does gdb attach to multi-threaded process?
我会尽量具体,但到目前为止,我已经把这个问题写得很糟糕,谷歌未能返回任何有用的结果(因此我的问题在这里)。
我将gdb附加到多线程c++服务器进程。我所能说的是,当我尝试执行常规的set-breakpoint-break-investigate时,奇怪的事情发生了。
首先,在等待断点被击中(在' continue '模式下)时,我突然得到了(gdb)提示信息:
<>之前继续。[线程0x54d5b940 (LWP 28503)退出][新线程0x54d5b940 (LWP 28726)]无法获取线程事件消息:调试器服务失败之前第二个,也是在等待断点被命中时,我突然被告知程序已经接收到SIGSEGV,并且-回到(gdb)提示- backtrace告诉我在pthread_cancel()中发生了段错误。注意,被调查的进程通常不会出现段故障。
我显然缺乏足够的信息来了解gdb是如何工作的,甚至无法开始猜测发生了什么。我做错什么了吗?每次我采取的步骤都是一样的:
- gdb attach
- 打破MyFunction ()
想法吗?谢谢。
我与类似的gdb问题斗争了一段时间。我的例子是有很多线程产生,执行几个函数,然后退出。
它似乎如果一个线程退出太快,有很多这些发生有时gdb无法跟上,当它失败时,它失败的风格在崩溃:)我认为它试图附加到一个线程,已经按照错误信息完成。
我认为这是gdb 6.5到7.6的一个问题,并且仍然在发生。没有尝试使用旧版本。
我的建议是寻找这个用例或类似的。一旦我改变我的设计,有一个线程服务的请求队列gdb工作完美。
从设计上讲,创建线程来消化操作比总是生成新线程更健康。
同样的代码在Visual Studio上调试没有问题,所以我不得不说这对我来说是一个关于gdb的小失望。
我使用Eclipse并查看GDB跟踪(通常在默认情况下启用)将为您提供更好的提示,说明GDB在哪里失败。控制台上的一个按钮显示了GDB跟踪。
- 在C++中使用cURL和多线程
- 多线程:线程或进程.h - C++
- 优化吞吐量:多线程与多进程
- 多个线程/进程是否可以在不同步的情况下同时从/写入文件的非重叠区域?
- 多线程中的 std::basicstring 的运行时分段错误C++点燃进程
- 在 Linux 中从单独的单线程进程生成多线程进程时出现问题
- 使用 c++ 的多线程和并行进程
- 与多线程一起登录多进程应用程序
- 多线程排挤了其他进程
- C++如何检查文件是否在使用-多线程多进程系统
- 多线程和多进程应用程序的锁定机制之间有什么区别
- gdb是如何连接到多线程进程的
- 提振.Asio复合操作在单线程和多线程进程
- c++多线程和进程中的向量
- gdb如何连接到多线程进程
- 独立的多线程进程同时阻塞
- 在多线程进程中处理信号的示例
- 多线程进程中的信号处理
- 多线程/分叉服务器守护进程的模型
- 如果一个且只有一个线程被停止,可以从多线程进程中跟踪读/写数据