2016-10-31 11 views
2

나는 C++ 프로그램이있는 :strace에서 GDB를 사용하여 메모리 누수를 찾는 방법은 무엇입니까?

  1. 가 모든 메모리 할당을 해제해야 (항상 같은 양의)
  2. 메모리를 할당
  3. 반복

그리고 나는 내가 찾은 방법을 사용하고 있습니다 here을 사용하면 모든 메모리가 올바르게 할당 해제되었는지 알 수 있습니다. 그러나 매 15 초마다 반복적으로 내 프로그램에서 더 많은 메모리를 요청합니다. 이론적으로는 발생하지 않아야합니다.

시간이 지남에 따라 프로그램이 메모리를 더 많이 요청하게하는 할당 취소 이유가 무엇인지, 그리고 왜 그 메모리가 요청되었는지 알고 싶습니다.

GDB를 사용할 수 있습니다. 내가 생각한 것은 : strace을 조금만 실행하면된다. 프로그램을 중단하고 프로세스 번호를 GDB에 전달하여 GDB를 연결하십시오. 그리고 나서 (아마?) examine GDB 명령을 사용하여 (아마?) (strace가 GDB에서 사용할 수있는 메모리가 할당 된 주소를 출력하기 때문에) 무슨 일이 일어나고 있는지 알아보십시오.

그러나 이것이 내가가는 길인지 확신 할 수 없으며 프로세스를 중지하는 프로그램을 중지하는 방법을 완전히 알지 못합니다. 어떤 도움이 필요합니까?

+0

가 봐 valgrind와 친구들. 그 질문은 너무 광범위하고 스택 오버 플로우에 더 충실합니다. 제대로 말하면, 여기에 장소가있을 수 있습니다. –

+0

@Rui F Ribeiro 내가 Termux를 사용하는 안드로이드에있어, Valgrind는 옵션이 아닙니다. – user6245072

답변

0

당신은 시도 고려해 볼 수 있습니다 :

  • http://valgrind.org/
  • 그냥 gdb를 사용하여 코드의 의심스러운 부분을 통해 스테핑 은 (힌트 - https://cgdb.github.io/ 인터페이스가 편리 할 수 ​​있음)에는 strace를을 =하지