2010-08-16 2 views
4

저는 Detours를 사용하여 다양한 메모리 할당 기능을 패치하는 C++의 메모리 추적 시스템을 작성했습니다. malloc 외에도 malloc에 ​​대한 호출을 받으면 stacktrace도 저장합니다 (그래서 누수 지점을 지정할 수 있습니다).메모리 누수를 추적 할 때 stacktrace를 얻는 방법은 무엇입니까?

정확한 스택 추적을 얻는 유일한 신뢰할 수있는 방법은 StackWalk64를 사용하는 것입니다 (RtlCaptureStackBackTrace를 시도했는데이 스택은 매우 단순한 스택 만 처리 할 수있었습니다).

그러나 여기 내 문제는, StackWalk64 차례로 StackWalk64 호출하여 스택 오버플로가 malloc 호출합니다. 이제는 재귀 호출을 처리하는 플래그를 가질 수 있지만 다중 스레드에서는 작동하지 않습니다.

이 피클에 가능한 해결책이 있는지 궁금합니다.

감사 리치 Carless

+0

FLS ('FlsAlloc','FlsSetValue','FlsGetValue' 및 friends)에 플래그를 저장할 수 없습니까? –

+0

어쩌면이 시스템이 XP 및 Windows 2003에서 실행될 것이라고 덧붙여 야합니다. – Rich

답변

1

당신이 StackWalk64에 재귀 호출을 방지하기 위해 malloc 수행에 스레드 로컬 플래그를 사용할 수 있을까요?

+0

네, 문제가 해결되었으므로 여기에 사용한 링크가 있습니다 : http://msdn.microsoft.com/en-us/library/ ms686997 (v = VS.85) .aspx – Rich

0

한때 비슷한 문제가 있었는데 glibc에서 가져온 malloc의 다른 버전 (수정 된 버전)에 디버그 인쇄 코드를 미리 연결하고 사전 할당 된 버퍼에서 작동하도록 약간 수정했습니다 (메모리를 피하려고했습니다. 우리의 경우 운영 체제에 대한 중요성). 그래도 시스템에 정적 prelinkage가 얼마나 어려운지 말할 수는 없습니다.

관련 문제