如何不通过参数传递,追踪函数调用信息

 

如何不通过参数传递,追踪函数调用信息,很多时候调试代码,定位到错误,但很难追踪是什么地方调用这个函数导致的错误

void Func1(void){
   Add();
}
void Func2(void){
   Add();
}
void Func3(void){
   Add();
}

void Add(void){
   ::Print("除了传递参数, 如何知道调用者是 Func1, Func2, Func3 ,哪一行代码调用的?");
   // __FUNCSIG__ , __FUNCTION__ , 只能知道是Add函数, 但是谁调用的, 如何追踪?
}
 
Jiayou Hu:

如何不通过参数传递,追踪函数调用信息,很多时候调试代码,定位到错误,但很难追踪是什么地方调用这个函数导致的错误

官方能不能增加调用跟踪?

__CALL_LINE__

__CALL_FILE__

__CALL_FUNCTION__

__CALL_FUNCSIG__

 
__LINE__
__FUNCTION__
__FILE__
__FUNCSIG__

解決的方法很多種 

了解一下用戶手冊

 
这问题 太高端了
 
Hung Wen Lin #:

解決的方法很多種 

了解一下用戶手冊


void Func1(void){
   Add();
}
void Func2(void){
   Add();
}
void Func3(void){
   Add();
}

void Add(void){
   ::Print("除了传递参数, 如何知道调用者是 Func1, Func2, Func3 ,哪一行代码调用的?");
   // __FUNCSIG__ , __FUNCTION__ , 只能知道是Add函数, 但是谁调用的, 如何追踪?
}

请教一下,上面那段代码,如果不通过参数传递,你怎么解决,让我开开眼界,谢谢

 
Hung Wen Lin #:

解決的方法很多種 

了解一下用戶手冊

void Func1(void){
   Add(__FUNCTION__+__LINE__);
}
void Func2(void){
   Add(__FUNCTION__+__LINE__);
}
void Func3(void){
   Add(__FUNCTION__+__LINE__);
}

void Add(string call){
   ::Print(call);
   //::Print("除了传递参数, 如何知道调用者是 Func1, Func2, Func3 ,哪一行代码调用的?");
   // __FUNCSIG__ , __FUNCTION__ , 只能知道是Add函数, 但是谁调用的, 如何追踪?
}

别告诉我你是这样解决的,那就没意思了