我会尽力确保尽可能具体,但到目前为止,我已经将这个问题描述得如此糟糕以至于Google未能返回任何有用的结果(因此我的问题在此处)。gdb如何连接到多线程进程?
我将gdb附加到多线程C++服务器进程。我只能说,在尝试进行通常的设置断点 - 断裂调查时,发生了奇怪的事情。
首先,在等待断点被打(在“继续”模式),我突然回来了(GDB)提示与消息:
Continuing. [Thread 0x54d5b940 (LWP 28503) exited] [New Thread 0x54d5b940 (LWP 28726)] Cannot get thread event message: debugger service failed
二,也同时等待断点被击中,我突然被告知程序已收到SIGSEGV并返回(gdb)提示 - 回溯告诉我发生在pthread_cancel()中的段错误。请注意,调查过程通常不会发生段错误。
我明显缺乏有关gdb如何工作的足够信息,甚至无法猜测发生了什么。我做错了什么?我采取的步骤是一样的,每次:
- GDB附上
- 休息 '的MyFunction()'
- 继续
的思考?谢谢。
我认为这是Linux吗?据我了解,它附加到可能有一个或多个线程的PROCESS。 –
是的,对不起,红帽企业Linux版本5.4(Tikanga)。是的,它确实附着在流程上,流程确实有多个线程。 –
对于第二个问题:由于调试器开销,在调试器下运行通常会更改线程的时序。这可能会触发现有的错误,这是不太可能被观察到的。 – languitar