2011-04-30 8 views
0

고려하십시오 :은 GDB에서 다른 하나의 함수에서 통과 포인터를 추적하는 방법

void bar (int* ptr3) 
{ 
    printf ("\n*ptr3 =%d\n",*ptr3); 
} 

void foo (int* ptr2) 
{ 
    *ptr2 +=5; 
    bar (ptr2); 
} 

int main() 
{ 
    int numb = 5; 
    int *ptr = &numb; 

    foo (ptr); 

    printf("\nHello !!!\n"); 

    return 0; 
} 

어떤 시점에서 내가의 역 추적을 찾을 수있는 방법으로, ptr을 추적하는 것이 가능 변수, 같은 : 대략

bar() : ptr3 
foo() : *ptr2 +=5; 
main(): int *ptr = &numb; 

: 우리는 몇 가지 방법을 통해 GDB에서 포인터 기록을 얻을 수 있습니다.

실제로 이것은 Purify를 통해보고 된 메모리 누수/UMR을 수정하는 데 도움이 될 수 있습니다.

감사합니다.

답변

0

예를 들어 ptr3 == ptr2 == ptr == &numb과 같이 귀하의 질문이 명확하지 않으므로 '포인터 이력'이란 정확히 무엇을 의미합니까?

당신이ptr 그 점 (numb에 즉 변화)에 값에 대한 변경 사항을 추적하기 위해 요구되는 것으로 보인다. 너 수 있습니다 GDB watchpoints와 함께 할.

+0

값을 추적하지 않습니다. 그러나 어떤 시점에서 백 포인터 (포인터 변수에 해당)를 볼 수 있습니다. 가능한가? -- 감사. –

+0

미안하지만, 나는 당신이 무엇을 요구하고 있는지 완전히 이해하지 못하고 있습니다. –

+0

ptr이 다음과 같이 전달된다고 가정하십시오. func1 {* ptr defined, func2_called (ptr)} ... func2 (* ptr) {값을 수정하고 ptr을 func3()에 전달합니다. PTR 자체에서 역 추적을 수행하여 func3() -> func2() -> func (1)과 같은 추적을 얻을 수 있습니까? –

관련 문제