문제

CDT를 사용할 때는 STD :: 문자열이 포함 된 문자열과 함께 'variable'디버그 창에 표시되도록합니다. 예를 들어 현재 단어를 들고있는 경우 "역사" 보고 싶어요 역사 디버거 창에서 "변수"로 표시되어 있습니다.

나는 그것을 물체로 뚫는 일반적인 방법이 있다고 생각하지만 손가락을 넣을 수는 없습니다. 누구 든지이 작업을 수행하는 방법을 아는 사람이 있습니까?

이것은 복잡한 물체에서 단일 필드 만 출력 할 때 사용하는 데 유용합니다.

감사합니다, 빌

도움이 되었습니까?

해결책

당신은 주목하십시오 ~하지 않다 객체로 드릴링하는 일반적인 방법을 원합니다. STL 컨테이너를 예쁘게 인쇄하고 싶습니다.

CDT가 이것을 디버거 백엔드로 위임한다고 생각합니다. 즉, 변수의 값과 확장 방법에 대해 CDT에 알리는 것은 디버거 (GDB, 아마도?)에 달려 있습니다.

편집 : CDT와 함께 배송 된 GDB 백엔드에는 STL 컨테이너의 "지능형"디스플레이에 대한 지원이 있다고 생각하지 않습니다. 정말로 관심이 있다면 CDT 개발 팀 (cdt-dev@eclipse.org)에 문의하는 것이 좋습니다.

업데이트/편집 : CDT에서 예쁜 프린터를 활성화하는 방법에 대한 지침은 아래의 다른 응답을 참조하십시오.

다른 팁

Eclipse/GDB가있는 STL 용기를 표시하는 것도 오랫동안 저에게 큰 고통이었습니다.

그러나 지금은 Python을 활성화 한 최신 GDB 버전이 이에 도움이 될 수 있음을 발견했습니다.

내가 한 일을 따릅니다 (Ubuntu Linux 8.10 사용) :

  • GDB 버전> = 6.8.50을 설치하십시오 (예 : 데비안 실험에서)
  • 다음 내용으로 프로젝트 루트에서 .gdbinit이라는 파일을 만듭니다.

    Python import gdb.libstdcxx.v6.printers

이제 STL 컨테이너가있을 것입니다 예쁜 인쇄.

이미 Python 활성화 GDB가 있는지 확인하려면 (또는 새 설치가 작동했는지 확인하려면 :

  • 콘솔에서 GDB를 시작하십시오
  • GDB 프롬프트에서 다음을 실행합니다

    (GDB) Python Print 'Python enabled GDB가 작동하고 있습니다!'

  • 위 명령이 우리가 기대하는 것을 생성하면 작동합니다.

자세한 내용은 확인하십시오 이 블로그.

윈도우 7

예쁜 프린터 얻기 :svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python

C/C ++ 디버그 GDB를 사용하여 Eclipse를 설정하십시오.

C:\MinGW\bin\gdb-python27.exe
C:\MinGW\bin\.gdbinit

몇 가지 주요 단계가 남았으므로 Windows 7 응답을 확장하고 싶습니다.

이것은 Eclipse CDT를 가진 Mingw 사용자를위한 것입니다

0) Python GDB가없는 경우 쉘/명령을 열고 Mingw-Get.exe를 사용하여 Python 지원 GDB '설치'

   MinGw-get.exe install gdb-python

1a) Python 2.7.x를 얻으십시오 http://python.org/download/ 설치

1B) PythonPath 및 Pythonhome이 귀하의 환경에 설정되어 있는지 확인하십시오.

 PYTHONPATH should be C:\Python27\Lib   (or similar)
 PYTHONHOME should be C:\Python27

1c) Pythonhome을 길에 추가하십시오

 %PYTHONHOME%;...

2a) 텍스트를 열고 다음 문을 입력하십시오. 세 번째 라인이 파이썬 스크립트가있는 위치를 가리키고 있습니다. 이것에 대해 아래의 메모를 참조하십시오!

python
import sys
sys.path.insert(0, 'C:/MinGW/share/gcc-4.6.1/python')         
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end

2B) '.gdbinit'참고 : Windows Explorer는 Explorer의 기간으로 시작하는 파일의 이름을 지정할 수 없습니다. 대부분의 텍스트 편집 (메모장 포함)이 당신을 허용합니다. GDB init 파일은로드시 GBD가 실행될 GDB 명령의 '스크립트'와 같습니다.

2c) '.gdbinit'파일은 GDB의 작업 디렉토리에 있어야합니다 (아마도 이것은 프로젝트 루트 디렉토리이지만 IDE가 알려줄 수 있습니다.

3) Eclipse (또는 다른 IDE) 환경 설정 대화 상자를 엽니 다. C ++ 디버거 서브 메뉴로 이동하십시오.

4) 사용할 Eclipse를 구성하십시오 C:\MinGW\bin\gdb-python27.exe 디버거와 당신의 .gdbinit 구성 파일로.

5a) 모든 디버그 런칭 구성을 다시 만들어 (이전 구성을 삭제하고 처음부터 새로운 것을 만듭니다).

--OR--

5B) 각 디버그 구성을 편집하고 새로운 GDB-Python.exe를 가리키고이를 가리 킵니다.

문제가 발생하면 :

-위의 Python 코드에서 위치를 Python 디렉토리로 변경하는 것을 잊지 마십시오! 이 디렉토리는 Mingw에 의해 만들어 졌으므로 예쁜 프린터를 다운로드하려고하지 마십시오. Mingw 설치 디렉터, 공유 폴더, GCC 폴더 (버전 번호)를 얻었으며 Python 폴더를 찾을 수 있습니다. 이 위치는 GDB가로드 한 Python 스크립트에 있어야합니다.

-또한 .gdbinit은 pita입니다. gdb-python.exe가 위치한 곳이 아닌 GDB의 작동 폴더에 올바르게 이름을 지정하십시오! GDB를로드 할 때 GDB 출력을 보려면 a) 'Python-enabled'가로드 중에 나타나고 .gdbinit의 진술이 나타나는지 확인하십시오.

-핑계에서는 시스템 변수에 많은 문제가있었습니다. Python이 '수입업자'를 제공한다면 PythonPath 또는 Pythonhome을 설정하지 않았을 가능성이 높습니다.

-'gdb-python27'(예 : c : mingw bin ')이있는 디렉토리도 경로에 있어야하며, 그럴 경우 절대 경로를 넣을 필요가 없기 때문에 일식을 설정하는 것이 조금 더 좋습니다. . 그러나 여전히 .gbdinit에는 absoulte 경로가 필요합니다. 작동한다면 디버거 시동시 이와 같은 GBD (Console-> GDB 트레이스)의 출력이 표시됩니다.

835,059 4^done
835,059 (gdb) 
835,059 5-enable-pretty-printing
835,069 5^done
....
835,129 12^done
835,129 (gdb) 
835,129 13source C:\MinGW\bin\.gdbinit
835,139 &"source C:\\MinGW\\bin\\.gdbinit\n"
835,142 13^done
835,142 (gdb) 

내가 찾은 유일한 방법은 GDB 명령 줄을 사용하는 것입니다.

  1. 에서 디버그 창, 클릭하십시오 GDB. 스택 추적 바로 아래에 있습니다.
  2. 에서 콘솔 창, GDB를 사용하십시오 up 원하는 스택 프레임에 도달하려면 명령
  3. 다시 콘솔 창, 사용 print 표시하라는 명령std::string 변하기 쉬운:

    p mystring

그러나 그것은 많은 문제입니다.

내가 알아 차린 것은 변수를 가리킬 때 std :: 문자열의 필드가 실제로 표시되지만 잘 자르기 때문에 가장 흥미로운 부분 인 문자열 값을 보지 못한다는 것입니다. 아마도 표시된 값의 최대 길이를 늘리는 방법이있을 수 있습니다.

Billcoke 최고의 샷은 Eclipse의 콘솔/디버거 창에 열 수있는 GDB 콘솔에 입력 할 수있는 GDB 매크로를 사용하는 것입니다. 여기에서 찾을 수 있습니다.http://www.yolinux.com/tutorials/src/dbinit_stl_views-1.01.txt

그것은 호버에 자동으로가되지 않지만 피곤한 입력을 입력해야합니다 .... 그러나 2009 년에도 Eclipse CDT는 우리에게 멋진 디버깅 기능을 제공하는 데 성공하지 못하므로 이것이 최고의 샷입니다.

RPSENG에게 : 팁 rpseng에 감사드립니다! 잘 작동합니다! 불행히도 그것은 내 일식 (Ganymede)이 너무 혼란스러워서 내 자신이 만든 클래스와 상속의 인스턴스에 대한 포인터 유형을 더 이상 발견하지 못할 것 같습니다. CDT 6.0과 함께 일하고 있으며 더 잘 작동하고 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top