【问题标题】:How to add breakpoint when thread sanitizer reports data-race?当线程清理程序报告数据竞争时如何添加断点?
【发布时间】:2022-03-09 17:33:34
【问题描述】:

对于地址清理器也有类似的问题,但对于线程清理器,它不起作用,我试图打破 __sanitizer_print_stack_trace,它也不起作用。

【问题讨论】:

    标签: gcc gdb thread-sanitizer


    【解决方案1】:
    1. 在 GDB 下运行程序,在exit_exit 上设置断点。在 Linux 上,还要设置 catch syscall exit_group
    2. TSAN_OPTIONS 中设置halt_on_error=1exit on first error 询问线程消毒剂:
    (gdb) set env TSAN_OPTIONS=halt_on_error=1
    (gdb) run
    ... error should be reported and one of the breakpoints should fire.
    
    1. 利润。

    附:当断点被命中时,使用GDBwhere命令查看错误是如何报错的。即使不设置halt_on_error,在堆栈上可能存在的某种__tsan_report_error 上设置断点也可能有效。

    【讨论】:

    【解决方案2】:

    当我第一次在我的项目中启用 Thread Sanitizer 时,Xcode 帮助我在 Breakpoint Navigator 中添加了一个断点。但是我在完成测试时将其删除。现在我再次需要它,当我再次启用 Thread Sanitizer 时,Xcode 没有为我创建它。

    请注意,我在这里使用的是 Xcode 11.0。

    要手动重新创建此断点,您需要打开断点导航器。然后单击导航器左下角的加号按钮 (+) 并从弹出菜单中选择 Runtime Issue Breakpoint。这会将断点添加到导航器,并出现一个窗口。

    Type下拉列表中,选择Thread Sanitizer

    给你!愚蠢的是,这个选项被埋在那里。但我还发现,与 Xcode 主下拉菜单 Debug > Breakpoints 相比,加号按钮菜单中提供的不同类型断点的选项更多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      相关资源
      最近更新 更多