문제

이것은 비트를 가하고 심하게 단순하지만...

가정 프로그램 호출하는 기능에 의해 작성된 제삼자에게 있습니다.이러한 당사자로 간주 될 수있 비 적대적이지만 할 수 없으로 간주됩"능력".각 기능에 걸릴 것입니다 일부는 인수,부작용과 값을 반환합니다.그들은 아무 상태는 동안 그들은 실행되지 않습니다.

목적하는 것입할 수 있다는 것을 증명하기 위해 발생하는 메모리 누수가 로그인하여 모든 mallocs(과 같은)및 그 해방 이후의 모든 기능을 종료됩니다.

이것이 가능한가요?이것이 실용적인?

p.s.의 중요한 부분이 나에게는 없다는 것을 보장하는 할당을 계속 그렇게 제거하는 방법에는 메모리 누수가 없을 하게 유용하지 않는다.

도움이 되었습니까?

해결책

지정하지 않습 운영 시스템 또는 환경,이 대답으로 가정 리눅스,glibc 및 C.

당신은 설정할 수 있습니다__malloc_후크,__무료_크__realloc_걸이를 가리키는 기능을 것이라고서 malloc(),realloc(),무료()각각합니다.이__malloc_훅 ncursesw 에는 와이드를 보여주는 프로토타입을 제작할 수 있습니다.을 추가할 수 있습을 추적 할당이에 이러한 후크,그 반환을 보 glibc 처리하는 메모리 할당 해제.

그것은 소리처럼 당신이 원하는 무료 어떤 라이브 할당할 때 타사의 기능을 반환합니다.는 방법이 있을 gcc 자동으로 삽입 통화에 모든 기능이 입구 및 출구를 사용하여-finstrument-함수,그러나 내가 생각하는 것이 우아하지 못한 것에 대해하려고 노력하고 있습니다.할 수 있는 당신이 당신의 자신의 코드에서 함수를 호출하는 메모리-추적 라이브러리 호출 한 후 하나 이러한 제삼자 기능을 가지고 있는가?할 수 있습니다 있는지 확인 할당되는 제삼자 기능하지 않았 이미 무료입니다.

다른 팁

첫째,당신을 제공해야에 대한 진입점 malloc()free() 과 친구들.기 때문에 이 코드를 컴파일이 이미(right?) 할 수 없습니다에 따라 달라집 #define 리디렉션할 수 있습니다.

다음을 구현할 수 있습에서 이러한 명백한 방법과 로그에 그들은 특정 모듈에 의해 연결 사틴 그 모듈을 사용합니다.

는 가장 빠른 방법이 포함됩 어떤 기록에서 모두. 는 경우 메모리 양들을 사용하여 제한된,왜 사전에 할당하는 모든"힙"그들이 필요하고 작성 할당기는?그런 다음 그것을 할 때에,무료는 전체"힙"그리고 당신은 끝났어!확장할 수 있었습이 생각하는 여러 힙면 그것은 더 복잡는다.

는 경우에 당신은 정말 필요가"로그온"고 만들지 않는 자신의 할당자,여기에 몇 가지 아이디어.중 하나,해시 테이블을 사용으로 포인터 내부 및 체인.다른 것을 할당하 여분의 공간 앞에서의 모든 블록에 넣고 당신의 자신의 구조가 포함 하는 말,인덱스로"로그 테이블,"다음을 무료로 목록은 로그에는 테이블 항목(스택으로도 무료로 하나 또는 무료로 다 O(1))입니다.이것은 더 많은 메모리를 그러나 빨리 되어야 합니다.

니다.내 생각에 그것은,그래서 속도를-칠은 수락가능합니다.

실행할 수 있습니다 세 번째 파티 기능은 별도의 프로세스에서 닫으면 프로세스를 사용하여 수행하고 있습니다.

더 나은 솔루션보다 로그인을 시도하 mallocs 할 수 있습 샌드박스는 함수를 호출할 때 그 대한 액세스를 제공합니 고정된 세그먼트 메모리고 다음 세그먼트 기능은 실행됩니다.

일축,무능한 메모리를 사용할 수 있습으로 손상에 악성 코드입니다.

할 수 있는지 당신은 단지 그들을 강제로 할당하는 모든 자신의 기억에 스택?이 방법은 것 보장했을 것 해방 후에는 기능을 종료됩니다.

과거에는 내가 쓴 소프트웨어 라이브러리에서는 C 는 메모리 관리 서브 시스템 포함하는 능력이 로그인 할당 및 확보하고,수동으로 일치하는 각 할당 및 무료입니다.이것의 일부를 사용하려고 시도할 때를 찾아 메모리 누수,그러나 그것은 어렵고 시간이 걸리 사용합니다.숫자의 로그를 압도하는 데 광범위한 금액을 이해하는 시간을 기록합니다.

는 경우 타사 라이브러리는 광범위한 할당은,그것의 더 많은 가능성이 다음을 추적을 통해 이것을 기록합니다.실행하는 경우 윈도우 환경에서 나는 것 같은 도구를 사용하여 정화[1]또는 BoundsChecker[2]할 수 있어야 하는 누수를 검색에서 당신의 타사 라이브러리입니다.투자 도구에서 지불해야 한다 자체에 대한 시간에 저장됩니다.

[1]: http://www-01.ibm.com/software/awdtools/purify/ 정화

[2]: http://www.compuware.com/products/devpartner/visualc.htm BoundsChecker

이후은 당신이 걱정하는 메모리 누수와 이야기에 대해 malloc/무료로,가정에서 당신 C.또한 저는 가정을 기반으로 질문하는 당신은에 액세스 할 수 없습의 소스 코드를 타사 라이브러리입니다.

네트워크가 필요하지 않습니다 생각을 검사하고 메모리의 앱을 전 호출 한 후,오류 메시지를 기록하면 그들은 다른 설득 타사 공급업체를 해결하기 위해 누출을 찾을 수 있습니다.

이 있는 경우 돈을 예비 품목,다음을 고려하여 정화를 추적하는 문제입니다.그것은 놀라운 작품,그리고 필요하지 않은 소스 코드 또는다.또한 다른 디버깅 malloc 라이브러리를 사용할 수 있는 저렴합니다.전기 담은 하나의 이름을 기억이 나요.다시 말해,디버깅하 후크에 의해 언급 덴 상류 계급이 보이 너무 재미있다.

당신은 너무 가난한 정도 Valgrind.그것은 그것보다 더 많이었다 6 년 전에 많은 쉽게 다이빙을보다 정화.

Microsoft Windows 에서 제공하는(사용 SUA 이 필요한 경우 POSIX),아마도 가장 진보된 힙+(다른 api 를 사용하는 것으로 알려져 있으로 힙)인프라스트럭처의 모든 운송 OS 오늘입니다.

the__malloc()디버깅 갈고리와 연결된 CRT 디버그 인터페이스 니한 경우에는 소스 코드를 테스트,그러나 그들은 종종 할당을 의 표준 라이브러리 또는 다른 코드는 연결되어 있습니다.이것은 예상으로 그들은 Visual Studio 힙 디버깅 infrastructure.

gflags 매우 포괄적이고 상세한 설정의 기능을 맞추기에 많은 유 포함 된 Windows 습니다.는 고급 기능을 위해 원본 및 이진만 사용하는 경우(그 OS 힙 디버깅 infrastructure).

그것이 로그인할 수 있는 전체 스택 추적(음 메시지 상징적인 정보에서 포스트-프로세스 작동),의 모든 힙 사용자를 위해 모든 힙 수정하여 진입 점의 순차적으로 필요한 경우.또한,그것을 수정할 수 있는 힙 pathalogical 경우를 맞출 수 있습의 할당 데이터는 페이지의 보호에 의해 제공되는 VM 시스템이 최적으로 할당됩니다(i.e을 할당하도록 요청 힙 블록의 끝에서 페이지를,그래서 심지어 singele 바이트 오버플로우가 발견되는 시간의 오버플로우가 발생합니다.

umdh 는 도구를 도울 수 있는 상태를 평가하기 위한 다양한 검사장만 데이터 지속적으로 축적된 실행하는 동안의 대상 o 그것은 간단한 영향을 주는 디버그를 중지에서 전통적인 컨텍스트입니다.또한, 경고, 마지막 체크 적어도,전체 크기의 버퍼에 저장하는 의 스택 정보,각 요청에 대해 다소 작은(64k 항목(항목+stack)),그래서 당신이해야 할 수도 있습 덤프에 대해 신속하게 무거운 힙 사용자.다른 방법이 있 이 데이터에 액세스하지만 umdh 는 것은 매우 간단하다.

참고 2 가지 모드가 있;

  1. 태 1,umdh{-p:Process-id/-pn:ProcessName}[-f:Filename][-g]
  2. 모 2,umdh[-d]{File1}[File2][-f:Filename]

    나는 무엇을 알고 정신을 사로 개발자가 선택한 사이 대체-p:foo 인수를 지정자의 벗은 주문의 인수를 하지만 그것을 얻을 수 있습니다.

디버깅 sdk 의 번호와 함께 작동 다른 도구 memsnap 는 도구는 분명에 초점을 맞추고 메모리 leask 과 같지만,나는 그것을 사용하지 않,귀하의 사용량이 다를 수 있습니다.

실행 gflags 과 함께 인수를 위한 UI 모드+arg 의 및/args 가 다른 "모드"사용한다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top