이 페이지에서

디버거 문제 해결

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

디버거를 시작할 수 없음

일부 바이러스 백신 애플리케이션에서는 디버거가 데이터를 검색하는 것을 허용하지 않습니다. 예를 들어, Windows에서 개발 PC에 Avira AntiVir가 설치되어 있는 경우 디버거를 시작하면 다음 메시지와 함께 디버거 실행이 실패할 수 있습니다: 디버깅된 프로세스가 운영 체제에서 신호를 수신했기 때문에 중지되었습니다. 신호 이름:? 신호 의미: 알 수 없는 신호입니다.

Avira AntiVir 데스크톱 제품의 일부 버전은 Qt Creator 을 비롯한 다양한 개발 환경에서 알려진 문제를 가지고 있습니다. 이 문제를 해결하려면 Avira는 avipbb.sys 10.0.22.22 버전으로 업데이트하라고 안내합니다. 자세한 내용은 2010-12-08 이후 IDE/디버거의 사용성 제한을 참조하십시오.

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

디버거가 중단점에 도달하지 않음

디버그 정보가 없는 릴리스 빌드를 만들었을 수 있습니다. GNU 컴파일러 컬렉션(GCC) 디버그 빌드에는 컴파일러 명령줄에 -g 옵션이 있습니다. 컴파일 출력에 이 옵션이 있는지 확인하세요. 없는 경우 Projects 모드에서 빌드 설정을 조정하세요.

디버거가 작동하지 않음

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

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

    참고: 오류 135는 일반적으로 종속 DLL을 찾을 수 없음을 의미합니다.

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

LocalsExpressions 보기를 사용하여 포인터 변수를 검사하고 변수 트리 항목을 확장하면 다른 트리 항목 레벨이 표시됩니다. 포인터 변수의 멤버를 직접 표시하려면 LocalsExpressions 보기의 컨텍스트 메뉴에서 Dereference Pointers Automatically 을 선택합니다.

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

구조 멤버가 구조 레이아웃에 따라 정렬되지 않음

기본적으로 구조 멤버는 알파벳 순서로 표시됩니다. 메모리의 실제 레이아웃을 확인하려면 LocalsExpressions 보기의 컨텍스트 메뉴에서 Sort Members of Classes and Structs Alphabetically 의 선택을 취소하세요.

시작 및 런타임 중에 기본 제공 디버거가 느립니다.

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

GDB 심볼 인덱스 캐싱

GDB를 백엔드로 사용하는 경우 해당 심볼 인덱스의 사본을 디스크의 캐시에 자동으로 저장하여 나중에 동일한 바이너리를 로드할 때 해당 캐시에서 검색할 수 있습니다. 환경설정 > Debugger > GDB > Use automatic symbol cache 로 이동하세요.

디버거 환경 설정의 GDB 탭

중단점 수 최소화하기

일부 디버깅 속도 저하는 디버거 내부의 중단점 유지(경우에 따라 모든 중단점을 각 단계마다 다시 삽입하고 제거해야 함) 및 각 단계 이후의 표현식 평가로 인해 발생합니다. 중단점과 감시하는 표현식의 수를 최소화하는 것이 좋습니다.

빌드 정리

오래된 .pdb 파일로 인해 디버깅 속도가 느려지는 경우 빌드를 새로 작성해 보세요.

증분 연결 비활성화하기

증분 연결은 디버깅에 영향을 줄 수 있습니다. 디버거 로그 보기에 모듈의 체크섬을 확인할 수 없음 메시지가 표시되면 증분 링크를 비활성화하세요.

CMake를 빌드 시스템으로 사용하는 경우 프로젝트 CMakeLists.txt 파일에 다음 줄을 추가합니다:

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

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

QMAKE_LFLAGS_DEBUG += /INCREMENTAL:NO

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

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

그 이유는 커널 하드닝에 설명되어 있습니다.

그러나 이 기능은 쉽게 비활성화할 수 있기 때문에 이 보안 조치의 유용성은 의심스러워 보입니다. 루트 권한이 있으면 0/proc/sys/kernel/yama/ptrace_scope 으로 작성하여 일시적으로 기능을 비활성화하거나 /etc/sysctl.d/10-ptrace.conf 에서 값을 변경하여 영구적으로 비활성화할 수 있습니다. 상승된 권한이 없더라도 나중에 $QTCREATORDIR/lib/libptracepreload.so 에 있는 것과 같이 prctl(0x59616d61, getppid(), 0, 0, 0); 을 호출하는 라이브러리를 LD_PRELOAD 환경에 추가하여 기능을 비활성화할 수 있습니다.

방법: 디버그, 디버깅, 디버거디버거도참조하세요 .

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.