我有一个需要调试的网络软件。它在多个地方分叉,我需要调试处理一个特定请求的一个特定函数。
有没有办法设置一个全局断点,即使它处于劣质流程中也会被捕获?
我无法使用follow-fork-mode child
,因为这将遵循第一个请求,而不是我需要调试的请求。
答案 0 :(得分:2)
实现此目的的一种方法是让gdb保持附加到所有进程。然后你会设置你的断点并像往常一样运行程序;断点将在碰到该位置的任何子进程中触发。您可以使用断点条件来尝试减少命中数。
要将gdb置于多劣模式,我使用:
set detach-on-fork off
set non-stop on
set pagination off
根据您的gdb版本,您可能还需要set target-async on
。
这种模式可能有点特殊。例如,当一个线程停止时,另一个线程继续运行。此外,报告了断点停止,但并不总是显而易见;我认为gdb没有立即切换到停止线程(这可能在gdb git中有所改变,我忘了)。