이 페이지에서

디버거 문제 해결

이 섹션에서는 디버깅 중에 발생할 수 있는 몇 가지 일반적인 문제와 그 해결 방법을 나열합니다.

디버거를 실행할 수 없음

일부 안티바이러스 응용 프로그램은 디버거가 데이터를 가져오는 것을 허용하지 않습니다. 예를 들어, Windows에서 개발용 PC에 Avira Antivirus가 설치되어 있는 경우, 디버거를 시작할 때 다음과 같은 메시지가 표시되며 시작에 실패할 수 있습니다 . 디버깅 중인 프로세스가 운영 체제에서 신호를 수신하여 중지되었습니다. 신호 이름:? 신호 의미: 알 수 없는 신호.

Wacom 태블릿과 같은 일부 장치에서는 실행 중인 프로세스로 인해 디버거가 실행되지 않을 수 있습니다. 실행 중인 모든 프로세스를 중지한 후 디버거를 다시 실행하십시오.

디버거가 중단점을 통과하지 못함

디버그 정보가 포함되지 않은 릴리스 빌드를 생성했을 수 있습니다. GNU 컴파일러 컬렉션(GCC) 디버그 빌드에는 컴파일러 명령줄에 ` -g ` 옵션이 포함됩니다. 컴파일 출력( Compile Output)에 이 옵션이 있는지 확인하십시오. 해당 옵션이 없다면, 릴리스 모드( Projects )에서 빌드 설정을 조정하십시오.

디버거가 작동하지 않음

디버거가 제대로 작동하지 않는 경우 다음을 시도해 보십시오:

  1. 실행 버튼 (Run)를 선택하여 빌드 및 실행 키트 선택기가 실행 가능한 대상을 선택했는지, 그리고 애플리케이션을 실행할 수 있는지 확인하십시오.
  2. 디버거가 올바르게 설정되어 있는지 확인하십시오.
  3. Debug 모드에서 View > Views > Debugger Log 로 이동하여 디버거 로그(Debugger Log ) 보기를 엽니다. 오른쪽 창 내용을 살펴보고 무엇이 잘못되었는지 확인하십시오. Qt Creator 메일링 리스트(qt-creator@qt-project.org)에 디버거 관련 질문을 올릴 때는 항상 해당 창 내용을 첨부하거나, IRC(Libera.Chat의 #qt-creator 채널)에서 질문하기 전에 코드 공유 서비스에 내용을 붙여넣으십시오.

    참고: 오류 135는 대개 종속 DLL을 찾을 수 없음을 의미합니다.

포인터 변수 멤버가 직접 표시되지 않음

LocalsExpressions 뷰를 사용하여 포인터 변수를 검사하고 변수 트리 항목을 확장하면, 또 다른 트리 항목 수준이 표시됩니다. 포인터 변수의 멤버를 직접 표시하려면, LocalsExpressions 뷰의 컨텍스트 메뉴에서 ' Dereference Pointers Automatically '를 선택하십시오.

변수를 전혀 볼 수 없는 경우, 디버그 빌드 구성을 선택했는지 확인하십시오.

구조체 멤버는 구조체 레이아웃에 따라 정렬되지 않습니다

기본적으로 구조체 멤버는 알파벳 순서로 표시됩니다. 메모리 내의 실제 레이아웃을 확인하려면 ‘ Locals ’ 및 ‘ Expressions ’ 뷰의 컨텍스트 메뉴에서 ‘ Sort Members of Classes and Structs Alphabetically ’을 선택 해제하십시오.

내장 디버거의 시작 및 실행 중 성능 저하

디버그 정보 로딩과 관련된 성능 저하는 피하기 어렵습니다. 다음 섹션에서는 가능한 해결책 몇 가지를 설명합니다.

GDB 심볼 인덱스 캐싱

GDB를 백엔드로 사용할 경우, 심볼 인덱스의 사본을 디스크의 캐시에 자동으로 저장하고, 향후 동일한 바이너리를 로드할 때 해당 캐시에서 불러올 수 있습니다. ‘ Preferences ’ > ‘ Debugger ’ > ‘ GDB ’ > ‘ Use automatic symbol cache ’로 이동하십시오.

디버거 환경 설정의 GDB 탭

중단점 수 최소화

디버깅 속도가 느려지는 원인 중 일부는 디버거 내부의 중단점 관리(특정 상황에서는 각 단계마다 모든 중단점을 삽입했다가 다시 제거해야 함)와 각 단계 후의 표현식 평가에서 비롯됩니다. 중단점과 감시 표현식의 수를 최소화할 것을 권장합니다.

빌드 정리

.pdb 파일이 최신 버전이 아니어서 디버깅 속도가 느려진다면, 빌드를 정리해 보십시오.

증분 링크 비활성화

증분 링크는 디버깅에 영향을 줄 수 있습니다. 디버거 로그(Debugger Log ) 뷰에 “모듈의 체크섬을 확인할 수 없음(Unable to verify checksum of module )” 메시지가 표시되면 증분 링크를 비활성화하십시오.

CMake를 빌드 시스템으로 사용하는 경우, 프로젝트의 ` CMakeLists.txt ` 파일에 다음 줄을 추가하십시오.

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /INCREMENTAL:NO" )

qmake를 빌드 시스템으로 사용하는 경우, 프로젝트의 .pro 파일에 다음 줄을 추가하십시오:

QMAKE_LFLAGS_DEBUG += /INCREMENTAL:NO

Linux에서 디버거가 실행 중인 프로세스에 연결할 수 없음

GDB는 ptrace 를 사용하여 실행 중인 프로세스에 연결합니다. 일부 리눅스 배포판에서는 이를 허용하지 않으므로, 기존 프로세스에 직접 연결하거나 Qt CreatorRun in terminal 옵션을 사용하는 모든 시도가 중단됩니다.

이에 대한 이유는 KernelHardening에 설명되어 있습니다.

그러나 이 기능을 쉽게 비활성화할 수 있기 때문에 이 보안 조치의 유용성은 의문스럽습니다. 루트 권한이 있다면, ` /proc/sys/kernel/yama/ptrace_scope `에 ` 0 `을 기록하여 일시적으로 기능을 비활성화하거나, ` /etc/sysctl.d/10-ptrace.conf`의 값을 변경하여 영구적으로 비활성화할 수 있습니다. 높은 권한이 없더라도 ` prctl(0x59616d61, getppid(), 0, 0, 0);`를 호출하는 라이브러리를 미리 로드하여 이 기능을 비활성화할 수 있습니다. ` Qt Creator `에는 이러한 라이브러리가 포함되어 있습니다. ` LD_PRELOAD ` 환경 변수에 ` $QTCREATORDIR/lib/qtcreator/libptracepreload.so `를 추가하십시오.

‘방법: 디버깅, 디버깅디버거항목도 참조하십시오 .

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.