void Cmfc_test_delDlg::OnBnClickedOk()
{
CObList *pList = new CObList();
pList->AddTail(new CAge(10));
pList->AddTail(new CAge(20));
pList->AddTail(new CAge(30));
pList->AddTail(new CAge(40));
pList->AddTail(new CAge(50));
pList->AddTail(new CAge(60));
// TODO: Add your control notification handler code here
CDialogEx::OnOK();
}
0:000> *Beakpoint is at CDialogEx::OnOK() in Cmfc_test_delDlg::OnBnClickedOk()
0:000> bl
0 e 00335010 [c:\vs\mfc_test_del\mfc_test_del\mfc_test_deldlg.cpp @ 158] 0001 (0001) 0:**** mfc_test_del!Cmfc_test_delDlg::OnBnClickedOk
0:000> *Lets look at local variable
0:000> dv /V /i /t
prv local 00a8ef58 @ebp-0x14 class Cmfc_test_delDlg * this = 0x00a8f864
prv local 00a8ef4c @ebp-0x20 class CObList * pList = 0x01e58cc8
0:000> *Display the type for CObList
0:000> dt 0x01e58cc8 CObList
mfc_test_del!CObList
+0x000 __VFN_table : 0x007f7f6c
=007f7fb4 CObject::classCObject : CRuntimeClass
=008b0c28 CObList::classCObList : CRuntimeClass
+0x004 m_pNodeHead : 0x01e5b5dc CObList::CNode <= Pointer to linked list from Start
+0x008 m_pNodeTail : 0x01e5b618 CObList::CNode <= Pointer to listed list from End
+0x00c m_nCount : 0n6 <= Number of elements in the linked list
+0x010 m_pNodeFree : 0x01e5b624 CObList::CNode
+0x014 m_pBlocks : 0x01e5b5d8 CPlex
+0x018 m_nBlockSize : 0n10 <= memory reserved for 10 elements
0:000> *Find the head of the list
0:000> ?poi(0x01e58cc8+0x004 )
Evaluate expression: 31831516 = 01e5b5dc
0:000> *Display the list
0:000> dt CObList::CNode -l 0x01e5b5dc pNext
mfc_test_del!CObList::CNode
pNext at 0x1e5b5dc
---------------------------------------------
+0x000 pNext : 0x01e5b5e8 CObList::CNode
+0x004 pPrev : (null)
+0x008 data : 0x01e58d20 CObject
pNext at 0x1e5b5e8
---------------------------------------------
+0x000 pNext : 0x01e5b5f4 CObList::CNode
+0x004 pPrev : 0x01e5b5dc CObList::CNode
+0x008 data : 0x01e5b690 CObject
pNext at 0x1e5b5f4
---------------------------------------------
+0x000 pNext : 0x01e5b600 CObList::CNode
+0x004 pPrev : 0x01e5b5e8 CObList::CNode
+0x008 data : 0x01e5b6d8 CObject
pNext at 0x1e5b600
---------------------------------------------
+0x000 pNext : 0x01e5b60c CObList::CNode
+0x004 pPrev : 0x01e5b5f4 CObList::CNode
+0x008 data : 0x01e5b720 CObject
pNext at 0x1e5b60c
---------------------------------------------
+0x000 pNext : 0x01e5b618 CObList::CNode
+0x004 pPrev : 0x01e5b600 CObList::CNode
+0x008 data : 0x01e5b768 CObject
pNext at 0x1e5b618
---------------------------------------------
+0x000 pNext : (null)
+0x004 pPrev : 0x01e5b60c CObList::CNode
+0x008 data : 0x01e5b7b0 CObject
0:000> *Display the list from back
0:000> dt CObList::CNode -l 0x1e5b618 pPrev
mfc_test_del!CObList::CNode
pPrev at 0x1e5b618
---------------------------------------------
+0x000 pNext : (null)
+0x004 pPrev : 0x01e5b60c CObList::CNode
+0x008 data : 0x01e5b7b0 CObject
pPrev at 0x1e5b60c
---------------------------------------------
+0x000 pNext : 0x01e5b618 CObList::CNode
+0x004 pPrev : 0x01e5b600 CObList::CNode
+0x008 data : 0x01e5b768 CObject
pPrev at 0x1e5b600
---------------------------------------------
+0x000 pNext : 0x01e5b60c CObList::CNode
+0x004 pPrev : 0x01e5b5f4 CObList::CNode
+0x008 data : 0x01e5b720 CObject
pPrev at 0x1e5b5f4
---------------------------------------------
+0x000 pNext : 0x01e5b600 CObList::CNode
+0x004 pPrev : 0x01e5b5e8 CObList::CNode
+0x008 data : 0x01e5b6d8 CObject
pPrev at 0x1e5b5e8
---------------------------------------------
+0x000 pNext : 0x01e5b5f4 CObList::CNode
+0x004 pPrev : 0x01e5b5dc CObList::CNode
+0x008 data : 0x01e5b690 CObject
pPrev at 0x1e5b5dc
---------------------------------------------
+0x000 pNext : 0x01e5b5e8 CObList::CNode
+0x004 pPrev : (null)
+0x008 data : 0x01e58d20 CObject
0:000> *Check the data field
0:000> dt 0x01e58d20 CAge
mfc_test_del!CAge
+0x000 __VFN_table : 0x007f0c58
=007f7fb4 CObject::classCObject : CRuntimeClass
+0x004 m_years : 0n10
0:000> *Same thing can be done using !list too.
0:000> !list -t CObList::CNode.pNext -x "dt" -a "CObList::CNode" -e 01e5b5dc
dt 0x1e5b5dc CObList::CNode
mfc_test_del!CObList::CNode
+0x000 pNext : 0x01e5b5e8 CObList::CNode
+0x004 pPrev : (null)
+0x008 data : 0x01e58d20 CObject
dt 0x1e5b5e8 CObList::CNode
mfc_test_del!CObList::CNode
+0x000 pNext : 0x01e5b5f4 CObList::CNode
+0x004 pPrev : 0x01e5b5dc CObList::CNode
+0x008 data : 0x01e5b690 CObject
dt 0x1e5b5f4 CObList::CNode
mfc_test_del!CObList::CNode
+0x000 pNext : 0x01e5b600 CObList::CNode
+0x004 pPrev : 0x01e5b5e8 CObList::CNode
+0x008 data : 0x01e5b6d8 CObject
dt 0x1e5b600 CObList::CNode
mfc_test_del!CObList::CNode
+0x000 pNext : 0x01e5b60c CObList::CNode
+0x004 pPrev : 0x01e5b5f4 CObList::CNode
+0x008 data : 0x01e5b720 CObject
dt 0x1e5b60c CObList::CNode
mfc_test_del!CObList::CNode
+0x000 pNext : 0x01e5b618 CObList::CNode
+0x004 pPrev : 0x01e5b600 CObList::CNode
+0x008 data : 0x01e5b768 CObject
dt 0x1e5b618 CObList::CNode
mfc_test_del!CObList::CNode
+0x000 pNext : (null)
+0x004 pPrev : 0x01e5b60c CObList::CNode
+0x008 data : 0x01e5b7b0 CObject
0:000> !list -t CObList::CNode.pNext -x "dt" -a "CObList::CNode data" -e 01e5b5dc
dt 0x1e5b5dc CObList::CNode data
mfc_test_del!CObList::CNode
+0x008 data : 0x01e58d20 CObject
dt 0x1e5b5e8 CObList::CNode data
mfc_test_del!CObList::CNode
+0x008 data : 0x01e5b690 CObject
dt 0x1e5b5f4 CObList::CNode data
mfc_test_del!CObList::CNode
+0x008 data : 0x01e5b6d8 CObject
dt 0x1e5b600 CObList::CNode data
mfc_test_del!CObList::CNode
+0x008 data : 0x01e5b720 CObject
dt 0x1e5b60c CObList::CNode data
mfc_test_del!CObList::CNode
+0x008 data : 0x01e5b768 CObject
dt 0x1e5b618 CObList::CNode data
mfc_test_del!CObList::CNode
+0x008 data : 0x01e5b7b0 CObject
{
CObList *pList = new CObList();
pList->AddTail(new CAge(10));
pList->AddTail(new CAge(20));
pList->AddTail(new CAge(30));
pList->AddTail(new CAge(40));
pList->AddTail(new CAge(50));
pList->AddTail(new CAge(60));
// TODO: Add your control notification handler code here
CDialogEx::OnOK();
}
0:000> *Beakpoint is at CDialogEx::OnOK() in Cmfc_test_delDlg::OnBnClickedOk()
0:000> bl
0 e 00335010 [c:\vs\mfc_test_del\mfc_test_del\mfc_test_deldlg.cpp @ 158] 0001 (0001) 0:**** mfc_test_del!Cmfc_test_delDlg::OnBnClickedOk
0:000> *Lets look at local variable
0:000> dv /V /i /t
prv local 00a8ef58 @ebp-0x14 class Cmfc_test_delDlg * this = 0x00a8f864
prv local 00a8ef4c @ebp-0x20 class CObList * pList = 0x01e58cc8
0:000> *Display the type for CObList
0:000> dt 0x01e58cc8 CObList
mfc_test_del!CObList
+0x000 __VFN_table : 0x007f7f6c
=007f7fb4 CObject::classCObject : CRuntimeClass
=008b0c28 CObList::classCObList : CRuntimeClass
+0x004 m_pNodeHead : 0x01e5b5dc CObList::CNode <= Pointer to linked list from Start
+0x008 m_pNodeTail : 0x01e5b618 CObList::CNode <= Pointer to listed list from End
+0x00c m_nCount : 0n6 <= Number of elements in the linked list
+0x010 m_pNodeFree : 0x01e5b624 CObList::CNode
+0x014 m_pBlocks : 0x01e5b5d8 CPlex
+0x018 m_nBlockSize : 0n10 <= memory reserved for 10 elements
0:000> *Find the head of the list
0:000> ?poi(0x01e58cc8+0x004 )
Evaluate expression: 31831516 = 01e5b5dc
0:000> *Display the list
0:000> dt CObList::CNode -l 0x01e5b5dc pNext
mfc_test_del!CObList::CNode
pNext at 0x1e5b5dc
---------------------------------------------
+0x000 pNext : 0x01e5b5e8 CObList::CNode
+0x004 pPrev : (null)
+0x008 data : 0x01e58d20 CObject
pNext at 0x1e5b5e8
---------------------------------------------
+0x000 pNext : 0x01e5b5f4 CObList::CNode
+0x004 pPrev : 0x01e5b5dc CObList::CNode
+0x008 data : 0x01e5b690 CObject
pNext at 0x1e5b5f4
---------------------------------------------
+0x000 pNext : 0x01e5b600 CObList::CNode
+0x004 pPrev : 0x01e5b5e8 CObList::CNode
+0x008 data : 0x01e5b6d8 CObject
pNext at 0x1e5b600
---------------------------------------------
+0x000 pNext : 0x01e5b60c CObList::CNode
+0x004 pPrev : 0x01e5b5f4 CObList::CNode
+0x008 data : 0x01e5b720 CObject
pNext at 0x1e5b60c
---------------------------------------------
+0x000 pNext : 0x01e5b618 CObList::CNode
+0x004 pPrev : 0x01e5b600 CObList::CNode
+0x008 data : 0x01e5b768 CObject
pNext at 0x1e5b618
---------------------------------------------
+0x000 pNext : (null)
+0x004 pPrev : 0x01e5b60c CObList::CNode
+0x008 data : 0x01e5b7b0 CObject
0:000> *Display the list from back
0:000> dt CObList::CNode -l 0x1e5b618 pPrev
mfc_test_del!CObList::CNode
pPrev at 0x1e5b618
---------------------------------------------
+0x000 pNext : (null)
+0x004 pPrev : 0x01e5b60c CObList::CNode
+0x008 data : 0x01e5b7b0 CObject
pPrev at 0x1e5b60c
---------------------------------------------
+0x000 pNext : 0x01e5b618 CObList::CNode
+0x004 pPrev : 0x01e5b600 CObList::CNode
+0x008 data : 0x01e5b768 CObject
pPrev at 0x1e5b600
---------------------------------------------
+0x000 pNext : 0x01e5b60c CObList::CNode
+0x004 pPrev : 0x01e5b5f4 CObList::CNode
+0x008 data : 0x01e5b720 CObject
pPrev at 0x1e5b5f4
---------------------------------------------
+0x000 pNext : 0x01e5b600 CObList::CNode
+0x004 pPrev : 0x01e5b5e8 CObList::CNode
+0x008 data : 0x01e5b6d8 CObject
pPrev at 0x1e5b5e8
---------------------------------------------
+0x000 pNext : 0x01e5b5f4 CObList::CNode
+0x004 pPrev : 0x01e5b5dc CObList::CNode
+0x008 data : 0x01e5b690 CObject
pPrev at 0x1e5b5dc
---------------------------------------------
+0x000 pNext : 0x01e5b5e8 CObList::CNode
+0x004 pPrev : (null)
+0x008 data : 0x01e58d20 CObject
0:000> *Check the data field
0:000> dt 0x01e58d20 CAge
mfc_test_del!CAge
+0x000 __VFN_table : 0x007f0c58
=007f7fb4 CObject::classCObject : CRuntimeClass
+0x004 m_years : 0n10
0:000> *Same thing can be done using !list too.
0:000> !list -t CObList::CNode.pNext -x "dt" -a "CObList::CNode" -e 01e5b5dc
dt 0x1e5b5dc CObList::CNode
mfc_test_del!CObList::CNode
+0x000 pNext : 0x01e5b5e8 CObList::CNode
+0x004 pPrev : (null)
+0x008 data : 0x01e58d20 CObject
dt 0x1e5b5e8 CObList::CNode
mfc_test_del!CObList::CNode
+0x000 pNext : 0x01e5b5f4 CObList::CNode
+0x004 pPrev : 0x01e5b5dc CObList::CNode
+0x008 data : 0x01e5b690 CObject
dt 0x1e5b5f4 CObList::CNode
mfc_test_del!CObList::CNode
+0x000 pNext : 0x01e5b600 CObList::CNode
+0x004 pPrev : 0x01e5b5e8 CObList::CNode
+0x008 data : 0x01e5b6d8 CObject
dt 0x1e5b600 CObList::CNode
mfc_test_del!CObList::CNode
+0x000 pNext : 0x01e5b60c CObList::CNode
+0x004 pPrev : 0x01e5b5f4 CObList::CNode
+0x008 data : 0x01e5b720 CObject
dt 0x1e5b60c CObList::CNode
mfc_test_del!CObList::CNode
+0x000 pNext : 0x01e5b618 CObList::CNode
+0x004 pPrev : 0x01e5b600 CObList::CNode
+0x008 data : 0x01e5b768 CObject
dt 0x1e5b618 CObList::CNode
mfc_test_del!CObList::CNode
+0x000 pNext : (null)
+0x004 pPrev : 0x01e5b60c CObList::CNode
+0x008 data : 0x01e5b7b0 CObject
0:000> !list -t CObList::CNode.pNext -x "dt" -a "CObList::CNode data" -e 01e5b5dc
dt 0x1e5b5dc CObList::CNode data
mfc_test_del!CObList::CNode
+0x008 data : 0x01e58d20 CObject
dt 0x1e5b5e8 CObList::CNode data
mfc_test_del!CObList::CNode
+0x008 data : 0x01e5b690 CObject
dt 0x1e5b5f4 CObList::CNode data
mfc_test_del!CObList::CNode
+0x008 data : 0x01e5b6d8 CObject
dt 0x1e5b600 CObList::CNode data
mfc_test_del!CObList::CNode
+0x008 data : 0x01e5b720 CObject
dt 0x1e5b60c CObList::CNode data
mfc_test_del!CObList::CNode
+0x008 data : 0x01e5b768 CObject
dt 0x1e5b618 CObList::CNode data
mfc_test_del!CObList::CNode
+0x008 data : 0x01e5b7b0 CObject
No comments:
Post a Comment