이 페이지에서

Heob

Heob을 사용하여 메모리 누수를 감지하세요.

Heob에 대한 설정을 지정하려면 Analyze > Heob 로 이동하세요.

Heob 설정

Extra arguments 에서 Heob 실행을 위한 추가 인수를 입력하세요. Heob 콘솔에서 사용 가능한 인수를 나열하려면 이 필드에 -H 를 입력하고 Enter를 선택하세요.

예를 들어, -oleaks.html 옵션을 사용하여 누수 데이터를 HTML 파일에 기록할 수 있습니다. 이 옵션과 함께 -g2 옵션을 사용하면 파일 내에서 누수 항목을 시각적으로 그룹화할 수 있으며, -L1024 옵션을 사용하면 최대 1024바이트의 누수 내용을 파일에 기록할 수 있습니다. 예를 들어, -oleaks.html -g2 -L1024

변경 사항을 기본 설정으로 저장하려면 ‘ 저장 ’을 선택하십시오.

사용자 지정 설정 프로필을 제거하려면 해당 프로필을 선택한 다음, [ Delete]을 선택하십시오.

다음 섹션에서는 사용 가능한 옵션에 대해 더 자세히 설명합니다.

기록 결과

검사 결과는 ‘ Memcheck ’ 보기에 표시되며 파일에 기록됩니다. ‘ XML output file ’에서 파일 이름을 지정하십시오. Heob은 프로젝트 디렉터리에 파일을 생성합니다.

파일 이름에 프로세스 식별자(PID)를 변수로 사용할 수 있습니다. 예를 들어, leaks-%p.xml 과 같이 지정할 수 있습니다. 이렇게 하면 자식 프로세스에도 Heob이 주입됩니다.

사용할 수 있는 다른 변수로는 부모 프로세스의 PID를 나타내는 ` %P `와 애플리케이션 이름을 나타내는 ` %n `가 있습니다.

변수를 사용하는 경우, Qt Creator 는 파일을 자동으로 열 수 없지만 프로젝트 디렉터리에서 파일을 열 수 있습니다.

예외 처리

Handle exceptions Qt Creator 에서 ‘ ’를 선택하면 표준 예외 핸들러가 사용되며, 애플리케이션이 중단될 경우 디버거가 자동으로 연결됩니다. 이 기능은 ‘ ’ > ‘ ’ > ‘ ’ > Off Preferences Debugger General Use Qt Creator for post-mortem debugging를 선택하여 xml-ph-0002@deepl.internal을 사후 디버거로 등록한 경우에만 작동합니다.

On 을 선택하면, 크래시의 원인과 위치를 확인하고 버퍼 오버런으로 인해 발생한 것인지 감지하는 Heob 예외 핸들러를 사용할 수 있습니다.

Only 을 선택하면 예외 핸들러 설치 기능을 제외한 모든 Heob 기능을 비활성화합니다. 애플리케이션이 충돌할 경우, 충돌에 대한 스택 트레이스만 표시됩니다. 따라서 이 옵션은 콘솔에서 Heob를 사용하거나 자식 프로세스에서도 Heob를 실행할 때 주로 유용합니다.

오류 발생 시 예외 발생

Raise breakpoint exception on error 확인란을 선택하면 애플리케이션 실행 시 오류가 표시됩니다.

이 옵션이 비활성화되어 있으면, 이중 해제( double free), 유효하지 않은 포인터 해제, 메모리 부족과 같은 오류에 대해 수집된 모든 데이터가 결과 파일에 기록되며, 애플리케이션 실행이 끝난 후에만 해당 오류를 확인할 수 있습니다.

이 옵션이 활성화되면 애플리케이션은 오류가 발생한 위치에서 중지됩니다. 이는 Heob를 디버거에서 실행하는 ‘ Run with debugger ’ 옵션과 함께 사용할 때 특히 유용합니다.

페이지 보호

Page protection 에서 ‘ Off ’를 선택하면 표준 메모리 할당 함수를 사용하고 메모리 누수 탐지만 활성화됩니다.

After 를 선택하면 각 할당된 블록의 끝에 보호 페이지를 배치하고, 이 페이지에 접근할 경우 예외를 발생시킵니다. Before 를 선택하면 각 할당된 블록 앞에 보호 페이지를 배치합니다. 이러한 옵션은 메모리를 소모하고 검사 속도를 저하시키므로, 64비트 프로그램이나 실행 시간이 짧은 프로그램에서만 사용하는 것이 좋습니다.

Freed memory protection 를 선택하면 해제된 모든 할당 페이지를 보호하여 해당 주소 공간이 다시는 사용되지 않도록 합니다. 이는 해제 후 사용(use-after-free ) 및 이중 해제(double-free) 탐지에 유용합니다. 그러나 32비트 프로그램의 경우 사용 가능한 메모리 주소 공간이 빠르게 소진될 수 있습니다.

누수 데이터 처리

' Leak details'에서 프로세스가 종료될 때 수집된 누수 데이터를 어떻게 처리할지 결정합니다. ' None '를 선택하면 누수 데이터가 수집되지 않습니다. 누수 유형 감지를 활성화한 경우, 프로세스가 종료될 때 Heob가 데이터를 수집하는 데 더 많은 시간이 필요할 수 있습니다.

' Simple '을 선택하면 해제되지 않은 모든 메모리를 결과 파일에 기록합니다.

Detect Leak Types (Show Reachable) ' Detect Leak Types '를 선택하면 모든 정적 및 전역 메모리 블록을 분석하여 누수 참조를 찾습니다. 접근 가능한 블록은 'reachable'로 표시되며, 다른 참조가 있는지 재귀적으로 확인됩니다. 참조가 발견되면 해당 블록은 'indirectly reachable'로 표시됩니다. 나머지 블록들은 서로에 대한 참조 여부를 확인한 후, 'indirectly lost' 또는 (블록들이 서로를 참조하는 경우) 'jointly lost'로 표시됩니다. 참조가 전혀 없는 블록은 ‘lost’로 표시됩니다. ‘ ’를 선택하면 접근 가능한 블록도 결과 파일에 기록됩니다.

' Fuzzy Detect Leak Types '를 선택하면, 어떤 주소에 대한 참조라도 있는 메모리 블록을 'reachable' 또는 'indirectly lost'로 표시합니다. 이 옵션은 할당 블록 내부의 특정 위치에 있는 주소만 저장하고 할당된 블록의 시작 부분을 직접 참조하지 않는 일부 사용자 정의 할당기(예: ffmpeg 의 ' av_malloc() ')와 함께 사용할 때 유용합니다. ' Detect Leak Types (Show Reachable) '를 선택하면 결과 파일에 도달 가능한 블록도 기록됩니다.

Minimum leak size 에서 탐지할 누수 크기를 바이트 단위로 선택합니다.

Control leak recording 에서 ‘ Off ’을 선택하여 모든 누수를 기록하십시오. 누수 기록이 실행 중인 동안에는 설정을 변경할 수 없습니다.

누수 기록을 시작하지 않고 Heob을 시작하려면 ‘ On (Start Disabled) ’를 선택하십시오. Heob 콘솔에서 ‘ on ’ 또는 ‘ off ’로 기록을 전환하고, ‘ clear ’를 선택하여 모든 결과를 기록하거나, ‘ show ’를 선택하여 현재 모든 누수를 결과 파일에 기록하십시오. 프로세스가 종료되기 전에 파일을 열어 내용을 확인하십시오.

Heob이 시작될 때 메모리 누수 기록을 시작하되 기록 제어 옵션을 유지하려면 ‘ On (Start Enabled) ’를 선택하십시오.

‘Heob으로 메모리 누수 감지하기’, ‘방법: 분석’, ‘분석기’, ‘코드 분석항목도 참조하십시오 .

Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.