我想用gcc選項-finstrument-functions來獲取函數的程序調用堆棧。__cyg_profile_func_enter和g ++ 2.95.4
典型代碼
void __cyg_profile_func_enter (void *, void *) __attribute__((no_instrument_function));
void __cyg_profile_func_exit (void *, void *) __attribute__((no_instrument_function));
int depth = -1;
void __cyg_profile_func_enter (void *func, void *caller)
{ }
void __cyg_profile_func_exit (void *func, void *caller)
{ }
int main()
{
printf("Hello world");
return 0
}
用gcc -finstrument-功能test.c的
運行./a.out,和一切ok編譯。
但是當我用g ++做到這一點時,我得到了對__cyg_profile_func_enter函數的未定義引用。我讀過它的發生是因爲_cyg函數是C代碼的一部分,如果我想在C++中使用它們,我應該使用extern「C」,因此會有最終代碼。
extern "C"{
void __cyg_profile_func_enter (void *, void *) __attribute__((no_instrument_function));
void __cyg_profile_func_exit (void *, void *) __attribute__((no_instrument_function));
int depth = -1;
void __cyg_profile_func_enter (void *func, void *caller)
{ }
void __cyg_profile_func_exit (void *func, void *caller)
{ }
}
int main()
{
printf("Hello world");
return 0
}
它編譯使用g ++ -finstrument函數test.c的,然後試着去執行它,但得到的核心轉儲錯誤消息。我使用gdb跟蹤轉儲,並且__cyg_profile_func_enter()中存在分段錯誤。
GCC版本是2.95.4。我也在4.4.3上測試過,一切正常。那麼是否有任何可能性使用2.95.4 gcc來解決這個問題?
您是否設法使用C++,手頭的任何解決方案? – cross