我正在寫一個profiler庫,它的任務是在應用程序中執行時打印函數的名稱。爲了達到這個目的,我使用/ Gh標誌編譯了應用程序並將其鏈接到具有_penter定義的分析器。 _penter調用一個函數來檢索名稱並打印它。這是正確的。標準庫函數調用的_penter
要刪除同一個函數正在打印兩次的實例,我在探查器中使用了unordered_set。
這也工作得很好;除非應用程序包含unordered_set類並使用它的方法。
當應用程序執行此操作時,剖析器對unordered_set方法的調用也會調用_penter,從而將代碼放入無限遞歸循環中,並導致一個stackoverflow。我已確定探查器不是使用/ Gh標誌構建的。
我的猜測是分析器和應用程序使用包含unordered_set方法的標準庫的相同副本。但我不知道如何解決這個問題。
我確實需要幫助解決這個問題。
非常感謝。
注:
- 我使用Visual Studio 2013
- Profiler是一個靜態庫。
- 兩個profiler.lib和Application.exe已建成使用/ MTD標誌
- 探查已libcpmtd.lib作爲一個附加的依賴
- 從libcmtd.lib無功能,如printf,被調用_penter。無論是從剖析器,還是從應用程序。
我在類似的問題,你可以指定,如果你能解決這個問題 –