* nix 시스템의 대형 C / C ++ 코드에서 메모리 관련 문제를 추적 / 해결하는 방법


9

메모리 관련 문제를 추적 할 때 어떤 전략을 사용합니까? 메모리 누수, 메모리 손상 등을 식별하기 위해 어떤 도구 (오픈 소스 및 독점)를 사용합니까? 시스템에서 gdb / dbx 만 사용할 수있는 경우 메모리 누수를 어떻게 추적합니까?

나를 위해 디버거로 메모리 누수를 수정하는 것은 매우 어렵습니다.


2
개인적 으로이 질문은 유닉스 관련보다 프로그래밍과 관련이 있다고 생각합니다.
phunehehe

답변:


12

소스 코드를 변경할 수 있다면 Dmalloc 은 훌륭합니다. 해제 된 포인터와 (디버깅 기호로 작성된 코드의 경우) 정확히 할당 된 행을 나열합니다.

당신이 할 수 없다면, Valgrind 는 그런 종류의 표준입니다. 나는 일반적으로 Valgrind를 사용하기가 다소 어렵다는 것을 알지만 더 많은 기능을 가지고 있으며 코드에 dmalloc 호출을 추가하지 않습니다.


dmalloc은 매우 큰 시스템에서 예상대로 성능이 좋지 않습니다. Valgrind의 ... 더 나은 내기이다, 심지어 거기 당신은 병목 현상을 칠 것

valgrind --tool memcheck "yourapp"는 런타임에 메모리 관련 정보를 제공합니다 (데스크탑 시스템에 유용). 또 다른 훌륭한 도구는 memwatch 이지만 소스와 함께 컴파일해야합니다. Memwatch는 파일에 세부 정보를 기록 할 수 있으므로 임베디드 시스템에 더 적합합니다.
rajaganesh87


2

valgrind의 Massif 는 메모리 누수를 찾는 가장 좋은 방법 중 하나입니다. 의심스러운 코드를 반복하거나 프로그램을 충분히 오래 실행하고 ms_print로 결과를 덤프하십시오. 일반적으로 호출 스택은이를 해결하기에 충분한 정보를 제공합니다.

GDB를 사용하면 실행중인 프로그램에 연결하고 다음과 같은 기능을 호출 할 수 있습니다 malloc_stats()

프로그램이 다른 언어로 작성된 경우 더 까다로울 수 있습니다. 최근 일부 GDB는 스크립팅 가능성을 얻었으며 사람들은 gdb-heap 과 같은 흥미로운 프로젝트를 시작했습니다.이 프로젝트 는 코어 덤프에서 Python 메모리를 분석 할 수 있습니다. C ++ 객체에 대해 유사한 메모리 분석 스크립트가 가능할 수 있습니다.

https : //.com/questions/2564752/examining-cc-heap-memory-statistics-in-gdb도 읽어보십시오.


1

Solaris의 경우, 이 StackOverflow 질문 에 대한 답변에 몇 가지 도구가 나열되어 있습니다 (다른 형식의 잘못된 메모리 액세스를 통한 누출 검사 포함).


1

나는 Objective-C를 얼마 동안 해왔으며 C 레벨 메모리 관리 및 그와 같은 것들을 다루는 분석기가 있습니다. Clang Static Analyzer 는 Apple이 xCode IDE와 함께 제공하기로 결정했습니다. 이것이 귀하의 질문에 좋은지 확실하지 않지만 C를하고 있다면 시도해 볼 가치가 있습니다.


작은 퀴즈 : clang은 처음부터 xcode에서 사용하기 위해 개발되었습니다. 참조 clang.llvm.org/clang_video-05-25-2007.html
다니엘 제임스에게

안녕하세요 Daniel, 그것은 사실 일 수도 있지만 최근까지 xCode에 포함되지 않았습니다 (적어도 Apple에서 다운로드 한 번들에는 포함되지 않았습니다)
phunehehe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.