Eclipse CDT 多线程调试不是最佳的 - 如何以独占方式运行线程
Eclipse CDT multithreaded debugging not-optimal - how does one run threads exclusively?
我知道这个问题的答案,我把它放在这里给别人看
如果你使用 eclipseCDT,你可能会明白 eclipse 不是一个调试器,它只是一个应用程序前端,专门用于 GDB。因此,在调试C++程序时,您实际上只是以更舒适的方式使用 GDB。如果你必须在 eclipse CDT 中调试一个多线程程序,你会意识到事情很快就会变得忙碌,因为当你遇到断点时,所有线程都会停止,当一个线程尝试在特定线程中执行一行时,它也会运行其他线程。为了使它正常工作,线程必须能够任意和排他性地运行,以便当程序员执行一行时,它只执行特定的线程。
因此,默认情况下,gdb的设置默认关闭"调度程序锁定"。如果调试多线程应用程序,您将了解必须在 GDB 中启用此功能才能实现所需的行为。如何运行此命令:
set scheduler-locking on
在日食CDT中的GDB中?
至少有一种方法可以肯定地解决这个问题,那就是知道如何浏览 eclipse 提供的大量功能。通常,当程序启动时,eclipse CDT 会切换控制台窗口(如果打开它,通常它位于底部(以显示程序的输入/输出。
但是,如果您不知道,可以更改此设置 - 请参阅此图像。倒数第二个右边的按钮(看起来像显示器的蓝色按钮(可以选择 GDB 输入控制台。在这个线程中也讨论了它。
从那里只需键入命令。
已解决,但需要更好的解决方案
但是现在这个问题已经解决了,为了方便起见,以更好的方式解决它;每次程序启动时都必须键入设置调度程序锁定是愚蠢的。但是加载 gdbinit 文件的问题在于,在 eclipse 为 gdb 设置程序之前,gdbinit 文件就被获取了。这是一个问题,因为它会导致调试器视图在 eclipse 中挂起,正如 gdb 抱怨的那样。要了解正在发生的事情,请尝试启动 gdb,然后给出命令而不加载要执行的二进制文件。它失败了 - 那么如何将其设置为粘性选项?
也许如果您添加以下 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
我的答案来自 @user1448557 . 不幸的是,我目前没有足够的声誉来评论它(或者顺便说一下对它投赞成票(。 该策略似乎很棒,但答案可能有点过时,因为它不涉及"设置调度程序锁定步骤"。 我已经在我的 gdb 初始化文件中(在我的 Eclipse 项目中(中放置了以下内容,它做了我想要的。
#inspired from [link to this thread][1]
define hookpost-run
set scheduler-locking step
end
关于@rbaleksandar的评论,Eclipse CDT 启动配置允许指定"GDB 命令文件",默认值通常是 .gdbinit
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- 并发/多线程:是否可以以这种方式生成相同的输出?
- 以线程安全的方式转换 C/C++ 中时区名称字符串的时区偏移量
- 如何以线程安全的方式更改目录?
- 等待线程的最佳方式是什么
- 如何使用 pthreads 以正确的方式设置两个线程之一的优先级
- 可能以有效的方式在模拟的循环中进行多线程
- 最理想的情况是,如果一个变量在多个线程中读取,但只在一个线程中写入,那么它是否应该在写入线程中以非原子方式读取
- 从多个线程收集结果的缓存友好方式
- 多线程 UI 的最佳方式
- 从线程更新进度条的最佳方式
- 使用QThread运行可管理后台线程的正确方式
- 导入 DLL 的工作方式不同(VS2003 到 VS2010,多线程到多线程 DLL)
- C++/Win32 我在 Windows 2000+ 上启动线程的最佳方式
- ACE互斥锁是如何工作的,以及为什么ACE线程互斥锁的工作方式不同
- 如何以线程安全的方式退出 C++03 中的程序
- Eclipse CDT 多线程调试不是最佳的 - 如何以独占方式运行线程
- 以线程安全的方式每秒打印队列的当前元素数
- 提升线程 - 安全/有保证的处理线程中断的方式
- 是否可以以编程方式冻结 Windows 上的线程