2017-12-08 19 views
3

Linux/gcc/clang에서 오는 중 Windows/Visual Studio에서 점점 더 많은 작업을하고 있습니다.MSVC의 위생 처리 기능과 같은 주소

내가 실제로 누락 된 부분은 주소 소독원 (범위 검사, 누수, 무료 사용 후 ...)입니다. 나는 약간의 연구를 해봤지만 몇 가지 시도를 해봤지만 신뢰할 수있는 것은 물론 완전한 (기능상의) 대체품을 찾지 못했습니다. 예를 들어 Dr.Memory를 시도했지만 Qt 기반 프로그램 (Windows 10 이상은 지원하지 않음)에서 작동하지 않는다는 것을 알게되었습니다.

그렇다면 Windows/MSVC에서 주소 살균기 기능을 어떻게 얻을 수 있습니까?

+0

msvc가 어려운 요구 사항이 아니라면 Linux를 개발하고 확인한 다음 gcc 및 MXE/mingw 등으로 크로스 컴파일하십시오. msvc로 컴파일 된 폐쇄 소스 라이브러리를받은 경우 valgrind는 여전히 종류입니다. 그것에 리눅스 + 와인과 함께 작동합니다. – Velkan

+0

답장을 보내 주셔서 감사합니다. 그러나 msvs에 대한 질문에 개략적으로 설명 된 기능에 관심이 있습니다. –

답변

2

적어도 clan의 ASan 및 Ubsan은 Windows에서 작동해야하는데 일부 제한이 있습니다. 이것들은 msvc 툴체인에서 clang-cl을 cl.exe의 드롭 인 대체품으로 사용할 수 있습니다 - google은 working on this, mozilla는 too 인 것 같습니다.

  • 컴파일러-RT 정적 CRT에 대한 링크 (/ MD (아산를 포함하는 그 소리의 패키지) : 나는 (그리고 지금까지 자신을 그것을 사용에서 저를 위해서 (때문에) 유지)의 알고

    문제) llvm/clang prebuilt 패키지에서 Qt가 AFAIK와 같은 동적 CRT (/ MT)를 필요로 할 때/MT와 함께 컴파일러 -rt를 직접 작성해야합니다 (이 here에 다른 질문을 만들었습니다).

  • 만 릴리스는 wiki

  • 하면 윈도우 포트에서 많은 추가 작업을 할 수없는 것 (this 문제 참조) 윈도우

  • Windows에서 예외를 지원하지 않습니다 지원됩니다 빌드 예 끔찍한 구식입니다 (2015 년 마지막 변경). 많은 사람들이이 기능을 생산적으로 사용하고 있는지 의심 스럽습니다. 그래서 온라인으로 다른 사용자의 도움을 점점

Windows에서 다른 대안에 대해 이야기 ... 상당히 어려울 수도있다 :
  • Appverifier

    현재 (
  • Dr Memory을 (윈도우 SDK와 함께 예정) 문제 추적기에 대한 의견에 따라 Windows에서 유지 관리되지 않습니다. 즉, Qt와 SSE 4.2 지침을 사용하는 모든 사람에게 완전히 사용할 수 없음을 의미합니다 (here 및 참조)
  • Intel Inspector (상업용).

Linux IMT의 Sanitizers와 Valgrind는 훨씬 더 고급이며/또는 이러한 도구보다 성능이 훨씬 뛰어납니다. 따라서 Linux에서 응용 프로그램을 구축하는 것이 최소한 크로스 플랫폼 툴킷 Qt (당신이 언급하는 것처럼).

+0

좋은 답변입니다. 또한 MSVC의 런타임 라이브러리에 내장 된 꽤 좋은 힙 메모리 추적 기능이 있음을 알아 두십시오.하지만이 기능을 켜야합니다. https://docs.microsoft.com/en-us/visualstudio/debugger/crt-debug-heap-details –