我正在编写一个探查器库,其任务是在应用程序执行时打印函数的名称。为了实现这一点,我使用/ Gh标志编译了app并将其链接到具有_penter定义的探查器。 _penter调用一个检索名称并打印它的函数。这种情况正确发生。
要删除两次打印相同功能的实例,我在分析器中使用了unordered_set。
这也很有效;除非应用程序包含unordered_set类并使用它的方法。
当应用程序执行此操作时,探查器对unordered_set方法的调用也会调用_penter,从而将代码置于无限递归循环中,并导致堆栈溢出。我确保不使用/ Gh标志构建探查器。
我的猜测是,探查器和应用程序使用包含unordered_set方法的标准库的相同副本。但我不知道如何解决这个问题。
我真的需要帮助解决这个问题。
非常感谢。
注:
答案 0 :(得分:0)
我认为您需要确保每个文件都提供/ Gh选项,而不是整个解决方案/项目。当/ Gh被提供给某个编译单元(即.cpp文件)时,它将使用_penter对文件中的每个函数进行检测。当然,这适用于此cpp文件中具有函数定义的标头。 std :: unordered_set中的函数已经过检测,因为它们位于已检测的编译单元中。我会尝试使用预编译的标题,或者以某种方式你需要将定义移出你使用的文件/ Gh。