2017-09-08 1 views
-2

gdb를 사용하여 코어를 디버깅하고 있습니다. 프레임에 몇 개의지도를 인쇄하려고합니다. 지도에는 구조에 대한 포인터가 값으로 포함되어 있습니다. 그러나 맵 중 일부는 올바르게 인쇄되지 않는 반면 일부는 정확하게 인쇄됩니다.Gdb는 STL 맵에서 포인터를 올바르게 출력하지 않습니다.

Eg: 
map1 < int, void* > 
map2 < int, A* > 

gdb> pmap map1 
10 0x7f2bbec0f4e0 

gdb> pmap map2 
20 0x7f2bbec00000 

map2의 포인터가 잘못 인쇄되는 이유는 무엇입니까?

답변

2

GDB pmap 명령이 없습니다. 아마도 this과 같이 길게 구식 인 stlview를 사용하고있을 가능성이 있습니다.

최신 GDB 배포판은 파이썬 예쁜 프린터와 함께 제공되기 때문에 맵을 잘 인쇄 할 수 있습니다. 대신 p map1p map2을 시도하십시오.

map2의 포인터가 잘못 인쇄되는 이유는 무엇입니까?

map2이 올바르지 않게 인쇄되지 않았습니다. 우리는 그것이 하나의 20, 0x7f2bbec00000 요소를 포함하고 있다는 것을 알고 있습니다.

P. 이 가짜 같습니다 당신이 실제 코드가 아니라 그것의 잘못된 연주를 보여 주면 더 유용한 답변을 얻을 것이다, 앞으로

std::map<int, void*> map1; 
std::map<int, A*> map2; 

:

map1 < int, void* > 
map2 < int, A* > 

당신이 아마 의미하는 것입니다.

관련 문제