Visual studio 2013 _由标准库函数调用的penter

Visual studio 2013 _由标准库函数调用的penter,visual-studio-2013,profiler,static-linking,Visual Studio 2013,Profiler,Static Linking,我正在编写一个分析器库,它的任务是在应用程序中的函数执行时打印它们的名称。为了实现这一点,我编译了带有/Gh标志的应用程序,并将其链接到具有_penter定义的分析器_penter调用一个函数来检索名称并打印它。这是正确的 为了删除同一函数被打印两次的实例,我在分析器中使用了一个无序的_集 这也很有效;除非应用程序包含无序的_set类并使用其方法 当应用程序执行此操作时,探查器对无序_set方法的调用也会调用_penter,从而将代码放入无限递归循环,并导致堆栈溢出。我已确保探查器不是使用/Gh

我正在编写一个分析器库,它的任务是在应用程序中的函数执行时打印它们的名称。为了实现这一点,我编译了带有/Gh标志的应用程序,并将其链接到具有_penter定义的分析器_penter调用一个函数来检索名称并打印它。这是正确的

为了删除同一函数被打印两次的实例,我在分析器中使用了一个无序的_集

这也很有效;除非应用程序包含无序的_set类并使用其方法

当应用程序执行此操作时,探查器对无序_set方法的调用也会调用_penter,从而将代码放入无限递归循环,并导致堆栈溢出。我已确保探查器不是使用/Gh标志构建的

我猜想探查器和应用程序使用的是包含无序_集方法的标准库的相同副本。但我不知道如何解决这个问题

我真的需要帮助来解决这个问题

多谢各位

注:

我正在使用Visual Studio 2013 分析器是一个静态库。 profiler.lib和Application.exe都是使用/MTd标志生成的 探查器将libcpmtd.lib作为附加依赖项 libcmtd.lib中没有函数像printf一样调用_penter。从探查器或应用程序。
我认为您需要确保每个文件提供/Gh选项,而不是整个解决方案/项目。当/Gh提供给某个编译单元,即cpp文件时,它将使用_penter对文件中的每个函数进行检测。当然,这适用于此cpp文件中具有函数定义的标题。std::unordered_集中的函数已插入指令,因为它们位于已插入指令的编译单元中。我会尝试使用预编译头,或者您需要将定义从使用/Gh插入的文件中移出。

我遇到了类似的问题,您能否指定是否能够修复该问题