2012-01-31 1 views
6

내 응용 프로그램의 인쇄 여러 라인 :는 방법 "tcmalloc을 : 큰 ALLOC ...."추적하는 등의

tcmalloc: large alloc 4294488064 bytes == 0x2b968d8000 @ 0x727432 0x727302 0x727a58 0x75a07d 0x574beb 0x585756 0x5575df 0x5717db 0x57108f 0x58078c 0x302b80610a 
tcmalloc: large alloc 4294488064 bytes == 0x2c97063000 @ 0x727432 0x727302 0x727a58 0x75a07d 0x574beb 0x585756 0x5575df 0x5717db 0x57108f 0x58078c 0x302b80610a 
tcmalloc: large alloc 4294488064 bytes == 0x2b968d8000 @ 0x727432 0x727302 0x727a58 0x75a07d 0x574beb 0x585756 0x5575df 0x5717db 0x57108f 0x58078c 0x302b80610a 

이 메시지의 출처는 무엇입니까? 내 앱에 버그가 있거나 메모리 누수가 있음을 의미합니까? 근본 원인을 어떻게 추적 할 수 있습니까?

+3

코드에서 mem 행을 추적하려면 addr2line 명령 줄 도구를 사용하십시오. addr2line -e <실행 파일 이름>으로 사용하고 Enter 키를 누른 다음 주소를 붙여 입력하십시오. –

+1

감사. 이 경우 줄 끝에 주소를 붙여 넣지 만 "?? : 0"이 표시됩니다. – Shawn

+1

-g 옵션을 사용하여 컴파일해야합니다. –

답변

7

응용 프로그램에 따라 http://code.google.com/p/gperftools/source/browse/trunk/src/tcmalloc.cc?r=80&redir=1 라인 843

보기 - 큰 할당하거나 버그가 될 수도 있고 그렇지 않을 수도 있습니다. 어떤 경우

-에서 @ 마크 후의 부분은 스택 추적되고 메시지

의 원인을 찾는 데 사용될 수있다 4G-479,232 또는 0x100000000- 동일한 것으로 보인다 반복 수 (4,294,488,064 0x75000)는 원래의 할당 호출이 음의 부호가있는 값을 갖고 있으며이를 부호없는 값으로 사용했다고 의심하게 만듭니다.

+2

감사합니다. 매우 도움이됩니다. 버그는 서명되지 않은 값과 서명 된 값을 섞어서 사용했다고 말한 것과 같습니다. – Shawn

1

당신은 여전히 ​​(<address> 오류 메시지에 @ 후 그 16 진수 중 하나 인 프로세스가 실행이 있거나 다음 gdb을 첨부 할 수 있어야 핵심이 (kill -ABRT)를 덤프 할 수 있었다과 info symbol <address> 명령을 실행하면 : 0x727432 ...를).

제 경우에는 확실한 오류였습니다.