2012-12-19 2 views
2

나는 callb으로 다음과 같은 기능 칼라를 교체하려면 (참조 : Get call stack from any thread within C)스택 깊이를 찾는 방법은 무엇입니까?

int calla() 
{ 
    printf("Inside calla\n"); 
    printf("A1=%x\n",__builtin_return_address (0)); 
    printf("A2=%x\n",__builtin_return_address (1)); 
    printf("A3=%x\n",__builtin_return_address (2)); 
} 


int callb() 
{ 
    int i,j; 
    j = stackdepth(); 
    for (i=0 ; i<j ;i++) 
    printf("%x\n",__builtin_return_address (i)); 
} 

어떻게 스택 깊이를 찾는 방법은?

답변

1

gcc 및 특정 플랫폼에서만 작동합니다. 여기에 모든 문서를 다시 입력 할 수 있지만 얻을 수있을만큼 쉽습니다. 버전 4.7.2 이상인 경우 gcc 설명서 (info gcc)의 6.48 절, 온라인은 here입니다.

"레벨 인수는 정수 여야합니다."라는 문장에 유의하십시오. 루핑이 까다로워 질 것입니다.

__builtin_return_address에서 안정적으로 스택 높이를 가져올 수는 없지만 문서 상단의 __builtin_frame_address에 따르면 스택 맨 위에 도달하면 0이 반환됩니다.

관련 문제