2010-11-22 2 views
5

우리는 BoundsChecker for Visual C++ 6 (나는 BoundsChecker 5 또는 6이라고 생각한다)과 함께 수년간 운영 해왔다. We''ve는 VS2008에 마침내 upgaded했다! 그리고 지금 구식의 BoundsChecker를위한 속행이 필요하다.C++ BoundsChecker followup

풍경은 어떻습니까?
어떤 도구가 있습니까?
마을에 새로운 아이들이 있습니까?
메모리 프로파일 러를 사용하는 문제를 다루는 새로운 아이디어가 있습니까?
최근에이 도구들을 사용한 경험이 있습니까?
권장 사항?

주 응용 프로그램은 많은 COM DLL이있는 C++이며 원시, C++ 및 COM 누수 및 개체를 추적하려고합니다. 이 크기의 Bounds Checker는 이미 많은 데이터와 한계를 분류하여 성능에 큰 어려움을 겪고있었습니다.

별도의 도구 일 수도 있지만 관리되는 응용 프로그램 (주로 C#)에 대한 지원이 필요합니다.


관련 (그러나 IMO 불완전) 질문 : Modern equivalent of BoundsChecker for Visual Studio 2008


[편집]

Regardign 주석, "현대 C++에서 방금 자기 검사 유형을 사용, 경계가 결코 깨지지 않습니다. " :

참조 카운트 된 스마트 포인터 순환 참조를 가질 수 있습니다. COM 구성 요소의 인터페이스는 본질적으로 안전하지 않습니다. 수동 메모리 관리가 많이 필요하기 때문입니다. UI가없는 타사 서비스 누수가 있었기 때문에 GDI는 우리의 야간 테스트를 중단 시켰습니다. 공급 업체는이를 "이상한"Microsoft API에 있다고 비난했습니다. 나는 C 기반 라이브러리를 인터페이스해야한다. 숫자 레시피의 의미에서 할당 트릭을 가정하는 레거시 코드가 많다. 3 글자보다 긴 변수 이름은 타이피스트를위한 것이다. 나는 std::vector<double>::iteratordouble ***보다 훨씬 무서워 보이는 엔지니어의 코드를 가지고 있습니다. 신호 처리의 견고한 배경없이 이들을 개발하고 테스트하는 행운을 빕니다.

여기에 오지 않는 한, 백만 줄의 코드 코어를 바보 같은 C++ 클래스로 다시 작성하고 캡슐화하고 수십 개의 제품이 이전처럼 작동하는지 확인하고 스마트하게 자신을 지키십시오. 메모리 검사기가 필요 없으면 좋겠어. 고맙습니다.

+1

현대 C++에서는 자체 점검 유형을 사용하기 때문에 경계가 깨지지 않습니다. – Puppy

+0

거의 재미있었습니다, DeadMG. – peterchen

+0

@ 마이클 - 축하해!: D – peterchen

답변

2

거대한 응용 프로그램 (여기서는 작동 중)이 있으며 새로운 경계 검사기 10.5 (64 비트 응용 프로그램 지원)가 거의 작동합니다. 트릭 맥스는 devpartner bounds checker의 모든 체커 기능을 한 번에 켜는 것이 아닙니다. 메모리 누수 만 켜거나 다른 기능을 켜고 앱을 실행하십시오. 그리고 꼭 필요한 모듈은 제외하십시오. 설정을 조정하여 더 빠르게 사용할 수있는 몇 가지 사항이 있습니다. 하지만 그렇습니다. 성능에 문제가 있습니다. 하지만 그것은 볼 게임의 이름입니다.

인텔의 Parrallel 검사관은 수천, 수천 가지 가양 성을주었습니다. 그것을 사용하지 않았습니다.

Purify는 32 비트 앱에서만 작동합니다. 소형 32 비트 기본 앱 관리되는 C++ 응용 프로그램에서 사용하는 것을 잊어 버리십시오.

대용량 메모리 오버 헤드로 인해 32 비트 앱이 큰 경우 일반적으로 메모리 분석 도구가 작동하지 않습니다. 그리고 32 비트 주소 공간에서 매우 제한된 메모리를 사용하기 때문에 공간이 빨리 소모되고 도구가 실패합니다.

+0

이론적으로 모든 메모리 추적 정보를 다른 프로세스로 옮길 수는 있지만 메모리 분석 도구가 이미 (아마도)보다 느려질 수 있습니다. –

2

우리는 Boundschecker, Intel의 Inspector and Purify를 평가했습니다.

그들은 모두 더 많거나 적습니다.

주 응용 프로그램의 경우 BoundsChecker는 몇 시간이 지난 후에도 시작하지 않습니다. 그것은 단지 몇 가지 작은 응용 프로그램을 위해 일했습니다; 하지만 두 가지를 찾아야합니다. (우리가 문제를 파악하는 데 여전히 그들과 접촉하고 있다고 생각합니다.)

Intel의 검사기는 작동하지만 코드를 실행하지 않으며 실행 파일에서만 실행됩니다. 인텔 제품군 전체).

Purify가 비참하게 실패했습니다. 우리는 결코 그것을 사용할 수 없었습니다.

우리는 아직 그것에 대해 변덕스러워하고 있습니다.

최대

3

면책 조항 및 경고 : 저는 DevPartner Studio 및 BoundsChecker 제품 소유자 인 Micro Focus를 위해 일합니다.

DevSartner Studio 10.5의 BoundsChecker 10.5 (Visual Studio 2005, 2008 및 2010)는 32 비트 및 64 비트 응용 프로그램 용 비 관리 코드를 Visual Basic에서 32 비트 응용 프로그램을 지원하는 것과 동일한 방식으로 지원합니다 스튜디오 6.0. X64 응용 프로그램을 지원하기 위해이 기능을 향상시키는 동안 아주 오래된 몇 가지 문제를 찾아서 해결했으며 일부 VS 2010 응용 프로그램에 .NET 4.0 코드가 있음에도 불구하고 작업을 시작했습니다. .NET이 프로세스 공간에서 많은 매우 불쾌한 일을하는 것으로 밝혀 졌기 때문에 Microsoft는 "하지 말고"라고 말합니다. Microsoft는 다른 모든 사람들에게 그렇게하지 말라고 경고하고 도구에 대한 내재 된 저항력을 갖추고 있습니다 기본적으로 거대한 바이러스 인 BoundsChecker와 유사합니다.

어쨌든,이 릴리스 (2 월 4 일) 이후 Windows 7 SP1 (아직 공개적으로 공개되지 않음)에서 작동하도록 업데이트했으며, BoundsChecker에 관한 한 Visual Studio 2010 SP1 잘. 우리는 또한 심한 .NET 4.0 함정을 발견했으며, 우리를 함락시키지 않도록했습니다. 이러한 향상된 기능과 수정 사항은 다음 공개 업데이트에서 사용할 수 있습니다.

+0

Micro Focus DevPartner Studio 또는 BoundsChecker에 관한 질문이있는 분은 http://community.microfocus.com/Forums/9_DevPartner의 포럼을 방문하십시오. –

+0

포럼이 변경되고 위치가 변경되었습니다. 지금은 http://community.microfocus.com/ –

1

Boundschecker : 그냥 구십구일의 저주 제품을 사용하라고 자격이 만 (& (^가입을 구입, 그래서 나는 꽤 그것에 대해 화가 저주 해요)하지만 어쨌든 나는 큰 메모리 문제 및 생각을 가지고 있었다 나는이 일을 실행해야만한다. 흥미 진진한 것들을 많이 잡는 것처럼 보일지 모르지만, 천천히, 천천히, 이렇게 넣어 주면된다 : 나의 appliciation은 여전히 ​​DLL init 코드에 있으며, 그것은 적어도 두 시간 동안 실행되어 왔고, 그리고 지금까지는 앱이 첫 번째 커플 2 번에서 정상적으로 작동하지 않는 한도까지 도달하지 못했습니다. 바운더 체커 (Boundschecker)는 numega days 동안 '똥'이었지만 실제로는 기회주의에 의해 행상 된 다른 고아 인 것 같습니다. 보 랜드 컴파일러와 같은 비즈니스 엔터티

정말 좋은데, 좋은 정보가 많이 있습니다. 나는 단지 내가 실제로 괜찮은 결과를 얻을 수 있을지 알 필요가있다. 현재 4GB 이상의 RAM을 사용하고 있으며 아직 완전히 시작하지 않았습니다. 필자는 12GB 만 인식 할 수있는 손상된 홈 에디션으로 win7/64를 사용하기 때문에 실제로 재미있는 일이 일어나기 전에 메모리가 부족할 수 있습니다. 언젠가는 앞으로 며칠이 걸릴 것입니다 ...

+0

입니다. Microsoft의 Application Verifier에 대한 행운이 있었나요? –

+0

가격 : $ 99는 $ 695에서 시작하는 정상적인 가격에 비해 싸다. 성능 : 우리는이 점을 잘 알고 있으며 제품을 개선하기 위해 노력하고 있지만 제품이 무엇을하려고하는지 고려할 때 완전한 정확성과 낮은 성능 영향을 동시에 요구할 수는 없습니다. 우리는 속도에 대한 정확성을 희생 할 수 있지만, 우리는 엉성함 때문에 구운 것입니다. 우리는 일반적으로 정확성을 위해 속도를 희생했습니다. 그런 다음 느린 속도로 구워졌습니다. 독에 이름을 지어 라. –

+0

"Boundschecker는 Numega 시절에 사용 되곤했으나 borland 컴파일러와 같이 기회가 많은 비즈니스 엔티티에 의해 행해지는 또 다른 고아 인 것 같습니다." - 진실과 거리가 멀지는 않지만, 한 가지만 고려하십시오. BoundsChecker와이 테스트에서 사용 된 응용 프로그램은 모두 1990 년대 이래 엄청나게 커졌습니다. BoundsChecker는 일반적인 1990 년대 응용 프로그램에서 빠르게 작업했을 수도 있지만 일반적인 응용 프로그램이 커지면서 BoundsChecker도 상당히 성장했습니다. 그 성장의 일부는 잘 의도 된 (그러나 잘못 지시 된) 디자이너들에 의해 더해진 것입니다. –