Eclipse CDT多线程调试不是最优的 - 如何独占运行线程?

Ada*_*ler 16 c c++ eclipse gdb eclipse-cdt

我知道答案,我把它放在这里让其他人看到它

如果你使用eclipse CDT,你可能会理解eclipse不是一个调试器,它只是一个应用程序前端,特别是GDB.因此,在调试C++程序时,您实际上只是以更舒适的方式使用GDB.如果您必须在eclipse CDT中调试多线程程序,您会发现事情很快就会变得忙乱,因为当您遇到断点时,所有线程都会停止,当一个人尝试在特定线程中执行一行时,它也会运行其他线程.为了使它正常工作,线程必须能够任意和异常地运行 - 这样当程序员执行单行时,它只执行特定的线程.

因此,默认情况下,默认情况下gdb的设置会关闭"scheduler-locking".如果您调试多线程应用程序,您将理解这必须在GDB中启用,以便实现所需的行为.如何运行此命令:

set scheduler-locking on
Run Code Online (Sandbox Code Playgroud)

在eclipse CDT中的GDB中?

小智 3

也许如果您添加以下 gdb 脚本,该脚本可以在程序停止时设置变量,并在继续时将其关闭:

define hook-step
set scheduler-locking on
end
define hookpost-step
set scheduler-locking off
end
define hook-run
set scheduler-locking off
end
define hook-continue
set scheduler-locking off
end
Run Code Online (Sandbox Code Playgroud)

  • 究竟如何从 Eclipse 内部执行 GDB 脚本? (2认同)