>백엔드 개발 >C++ >GDB에서 C `std::벡터`의 내용을 인쇄하는 방법은 무엇입니까?

GDB에서 C `std::벡터`의 내용을 인쇄하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-30 03:55:28769검색

How to Print the Contents of a C   `std::vector` in GDB?

C 벡터에 대한 GDB 디버깅

C 코드 디버깅에는 데이터 구조의 내용을 검사하는 작업이 포함될 수 있습니다. 이는 C 벡터와 같은 복잡한 구조를 다룰 때 특히 어렵습니다. 이 문제를 해결하기 위해 이 기사에서는 std::Vector의 요소를 인쇄하는 방법을 살펴봅니다.

먼저 벡터 요소를 저장하는 내부 배열에 대한 포인터를 식별합니다. GCC 4.1.2에서 이 포인터는 myVector._M_impl._M_start 표현식을 통해 액세스할 수 있습니다.

전체 벡터를 인쇄하려면 다음 GDB 명령을 사용합니다.

print *(myVector._M_impl._M_start)@myVector.size()

이 명령은 myVector._M_impl._M_start 주소에서 시작하여 myVector.size() 요소에 대해 계속되는 벡터 요소.

벡터의 처음 N 요소만 인쇄하려면 다음과 같이 명령을 수정하세요.

print *(myVector._M_impl._M_start)@N

이 명령은 벡터의 첫 번째 N 요소를 인쇄합니다.

설명:

이 명령은 벡터가 구현되는 방식을 활용하기 때문에 작동합니다. GCC 4.1.2에서. 내부 배열은 벡터의 _M_impl._M_start 필드에 저장되며 GDB의 print P@N 명령을 사용하면 포인터 P에서 시작하는 배열의 N 요소를 인쇄할 수 있습니다.

바로가기:

GDB 초기화 파일(.gdbinit)에 바로가기를 만들어 디버깅 프로세스를 단순화할 수도 있습니다. .gdbinit 파일에 다음 줄을 추가하세요.

define p P@N

이렇게 하면 print P@N 명령에 대한 별칭이 생성되어 p를 사용하여 배열 요소를 더 편리하게 인쇄할 수 있습니다.

위 내용은 GDB에서 C `std::벡터`의 내용을 인쇄하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.