【发布时间】:2022-03-09 17:33:34
【问题描述】:
对于地址清理器也有类似的问题,但对于线程清理器,它不起作用,我试图打破 __sanitizer_print_stack_trace,它也不起作用。
【问题讨论】:
标签: gcc gdb thread-sanitizer
对于地址清理器也有类似的问题,但对于线程清理器,它不起作用,我试图打破 __sanitizer_print_stack_trace,它也不起作用。
【问题讨论】:
标签: gcc gdb thread-sanitizer
exit 和_exit 上设置断点。在 Linux 上,还要设置 catch syscall exit_group。TSAN_OPTIONS 中设置halt_on_error=1 向exit 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.
附:当断点被命中时,使用GDBwhere命令查看错误是如何报错的。即使不设置halt_on_error,在堆栈上可能存在的某种__tsan_report_error 上设置断点也可能有效。
【讨论】:
abort_on_error=1 添加到 TSAN_OPTIONS 以使 gdb 中断而不是退出(请参阅 github.com/google/sanitizers/wiki/SanitizerCommonFlags)
当我第一次在我的项目中启用 Thread Sanitizer 时,Xcode 帮助我在 Breakpoint Navigator 中添加了一个断点。但是我在完成测试时将其删除。现在我再次需要它,当我再次启用 Thread Sanitizer 时,Xcode 没有为我创建它。
请注意,我在这里使用的是 Xcode 11.0。
要手动重新创建此断点,您需要打开断点导航器。然后单击导航器左下角的加号按钮 (+) 并从弹出菜单中选择 Runtime Issue Breakpoint。这会将断点添加到导航器,并出现一个窗口。
从Type下拉列表中,选择Thread Sanitizer。
给你!愚蠢的是,这个选项被埋在那里。但我还发现,与 Xcode 主下拉菜单 Debug > Breakpoints 相比,加号按钮菜单中提供的不同类型断点的选项更多。
【讨论】: