【问题标题】:Using Intel TBB in debug mode在调试模式下使用英特尔 TBB
【发布时间】:2026-02-20 06:20:11
【问题描述】:

我正在尝试使用 Intel Thread Building Blocks 调试 C++ 代码,使用我在此处找到的过程 Debugging in threading building Blocks。 我的问题与下面这句话有关。

确保编译时宏 TBB_USE_DEBUG 设置为 1,以便启用 TBB 的检查。

我添加了宏#define TBB_USE_DEBUG 1 在我的主要功能开始时。但是,在编译时我收到以下警告

warning: "TBB_USE_DEBUG" redefined
 #define TBB_USE_DEBUG 1
/usr/include/tbb/tbb_config.h:287:0: note: this is the location of the previous definition
 #define TBB_USE_DEBUG 0

因此我的两个问题:

  • 我把宏放在好地方了吗?
  • 如何检查我的代码是否确实与调试库链接?

【问题讨论】:

    标签: c++ tbb


    【解决方案1】:

    你必须把#define 之前你包括来自TBB库的任何东西。尤其要确保它位于源文件或头文件中的任何 #include <tbb> 之前。

    【讨论】:

      【解决方案2】:

      根据errortext,定义是在includes之后插入的。意思是,很可能没有任何影响,因为

      • 仅在以前包含的标头中评估定义
      • 或者因为除主函数之外的源看不到宏

      解决这个问题

      • 首选:将所有源文件的定义设置为编译器参数。这通常是-D 参数
      • 或在所有源中的任何包含之前设置定义。通常由委托标题完成。

      我不知道如何测试调试是否处于活动状态,因为我不知道 TBB。

      【讨论】:

      • 这似乎是最好的解决方案,因为我有许多不同的文件。只是为了给潜在的未来读者提供一个现成的描述,我在编译标志中添加了-D TBB_USE_DEBUG=1