필자가 작성한 예쁜 프린터의 경우 컨테이너에서 사용되는 정렬 또는 유형을 알고 싶습니다. 불행히도 alignof()
또는 유사한 "표준"연산자를 사용하면 작동하지 않습니다 (https://sourceware.org/bugzilla/show_bug.cgi?id=17095). 또한 작동하지 않는 소스 코드에서 직접 작업 "전형적인"매크로 트릭을 사용 : GDB의 Python API에서 (또는 GDB에서 직접) 타입 정렬을 얻을 수있는 방법이 있습니까?
p ((char *)(&((struct { char c; double _h; } *)0)->_h) - (char *)0)
A syntax error in expression, near `{ char c; double _h; } *)0)->_h) - (char *)0)'.
은 모든 것을 가능, 또는 어쩌면 유일한 방법은 그 내부 GDB에서 지원하는 것입니다?
"정렬은 관련 유형 크기에서 계산하기가 너무 어렵지 않습니다"라는 말은 크기를 가져 와서 아키텍처의 최대 정렬보다 크지 않은 다음의 거듭 제곱을 계산하는 것입니다. 이것은 수동으로 정렬되지 않았고 배열과 구조체에 대해 실패하는 유형에서만 작동합니다 ... 그래서 나는 당신이 그보다 더 복잡한 것을 생각하고 있다고 생각합니다. –
정렬이 명시 적으로 설정된 유형이 걱정된다면 컴파일러를 어떻게 든 실행하거나 gdb를 수정하는 것 외에는 할 수있는 일이 없습니다. 보다 일반적인 경우에는 플랫폼에 맞는 일반적인 레이아웃 규칙을 구현하면됩니다. –