난 표준이 : 내가 키로 shared_ptrs을 사용하고지도 :공유 PTR지도
std::map<shared_ptr<object>, shared_ptr<object>>
그러나, 디버깅, 나는 맥 OS에 lldb를 사용하여 이러한지도를 열 수 없습니다 나는 경우 또는 리눅스에서 gdb. gdb의 경우 libstdcxx/v6/printers.py 파일을 수정하고 SharedPointerPrinter 클래스 (아래 코드 참조)에 반복기를 추가하여 우분투에서이 문제가 해결되었습니다. 그러나 lldb에 대해이 문제를 해결하는 방법을 모르겠습니다. 누구든지 나를 도울 수 있거나 올바른 방향으로 나를 가리킬 수 있다면 그것은 위대 할 것입니다.
이 문제를 해결하기 위해 다른 정보가 필요하면 알려 주시면 기꺼이 제공해 드리겠습니다.
class SharedPointerPrinter:
"Print a shared_ptr or weak_ptr"
class _iterator:
def __init__(self, sharedPointer):
self.sharedPointer = sharedPointer
self.managedValue = sharedPointer.val['_M_ptr']
self.count = 0
def __iter__(self):
return self
def next(self):
if self.managedValue == 0:
raise StopIteration
self.count = self.count + 1
if (self.count == 1):
return ('Use count', self.sharedPointer.val['_M_refcount']['_M_pi']['_M_use_count'])
elif (self.count == 2):
return ('Weak count', self.sharedPointer.val['_M_refcount']['_M_pi']['_M_weak_count'] - 1)
elif (self.count == 3):
return ('Managed value', self.managedValue)
else:
raise StopIteration
def __init__ (self, typename, val):
self.typename = typename
self.val = val
def children (self):
return self._iterator(self)
def to_string (self):
state = 'empty'
refcounts = self.val['_M_refcount']['_M_pi']
if refcounts != 0:
usecount = refcounts['_M_use_count']
weakcount = refcounts['_M_weak_count']
if usecount == 0:
state = 'expired, weakcount %d' % weakcount
else:
state = 'usecount %d, weakcount %d' % (usecount, weakcount - 1)
return '%s (%s) to %s' % (self.typename, state, self.val['_M_ptr'])