[๋๋ฒ๊น ] ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ ๊ฒํ๋ ๋ฐฉ๋ฒ - CRTDBG Snapshot(์์ ํฌํจ)
์๊ฐ
๋ฉ๋ชจ๋ฆฌ ๋์์ ๊ด๋ จ๋ ํฌ์คํ ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
[๋๋ฒ๊น ] ๋ฉ๋ชจ๋ฆฌ ๋์์ ์ ๊ฒํ๋ ๋ฐฉ๋ฒ ์๊ฐ
์ง๋ ํฌ์คํ ์ ํตํด CRTDBG๋ฅผ ์ด์ฉํ ๋ฉ๋ชจ๋ฆฌ ๋์ ์ ๊ฒ ๋ฐฉ๋ฒ์ ์๊ฐํ์์ต๋๋ค.
[๋๋ฒ๊น ] ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ ๊ฒํ๋ ๋ฐฉ๋ฒ - CRTDBG (์์ ํฌํจ)
๊ทธ๋ฐ๋ฐ CRT ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ ๋ค๋ฅธ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ๋ ์์ต๋๋ค. ์ด๋ฒ ํฌ์คํ ์ ํตํด CRT ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ค๋ ์์ ์ด์ฉํ ๋ฉ๋ชจ๋ฆฌ ๋์ ์ ๊ฒ ๋ฐฉ๋ฒ์ ์๊ฐํ๊ฒ ์ต๋๋ค.
CRT ์ค๋ ์
CRT ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ _CrtMemState
๋ผ๋ ๊ตฌ์กฐ์ฒด๊ฐ ์ ์๋์ด ์์ต๋๋ค. ์ด ๊ตฌ์กฐ์ฒด๋ ๋๋ฒ๊ทธ ํ(Debug Heap)์ ์ฒซ ๋ฒ์งธ block ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๊ตฌ์กฐ์ฒด๋ฅผ ์ด์ฉํ _CrtMemCheckpoint
ํจ์๊ฐ ์์ต๋๋ค. ์ด๋ ํธ์ถ๋ ์๊ฐ์ ๋๋ฒ๊ทธ ํ์ ํ์ฌ ์ํ์ ๋ํ ์ค๋
์์ ๋ง๋ค๊ฒ ๋ฉ๋๋ค. ์ด ์ ๋ณด๋ _CrtMemState
์ ์ ์ฅ๋ฉ๋๋ค. ์์ฑ๋ ์ค๋
์์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋น๋กฏํ ์ฌ๋ฌ ์ ๋ณด๊ฐ ์์ผ๋ฉฐ _CrtMemDifference
๋ก ๋ ์ค๋
์์ ์ฐจ์ด์ ์ ๋ฐํํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ํ๋ฅผ ์ ๊ฒํ ์ ์์ต๋๋ค. ๋ฌผ๋ก , ์ด๋ฐ ์ ๊ฒ์ ๋๋ฒ๊ทธ ๋ชจ๋ ์ผ ๋์๋ง ๊ฐ๋ฅํฉ๋๋ค.
C++ Console ์์
์ง์ ์์ ๋ฅผ ๋ง๋ค์ด ํ ์คํธํด ๋ณด๊ฒ ์ต๋๋ค. ์๋ ์ฝ๋์ฒ๋ผ ์์ฑํฉ๋๋ค.
#include "pch.h"
#include <Windows.h>
#include <iostream>
#define _CRTDBG_MAP_ALLOC
#include <cstdlib>
#include <crtdbg.h>
#ifdef _DEBUG
#define new new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
#endif
int main()
{
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
_CrtMemState s1;
_CrtMemCheckpoint(&s1);
_CrtMemDumpStatistics(&s1);
byte* ptr = new byte[100];
//delete[] ptr;
_CrtMemState s2;
_CrtMemCheckpoint(&s2);
_CrtMemDumpStatistics(&s2);
_CrtMemState s3;
if (_CrtMemDifference(&s3, &s1, &s2) == true)
_CrtMemDumpStatistics(&s3);
}
_CrtMemState
๋ ์ค๋
์ ์ ๋ณด๋ฅผ ๊ฐ๋ ๊ตฌ์กฐ์ฒด์
๋๋ค. ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ ์ธ s1, ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํ์ธ s2 ๊ทธ๋ฆฌ๊ณ s1
๊ณผ s2
์ ์ฐจ์ด์ ์ ๋ณด๋ฅผ ๊ฐ๋ s3
์ ์ ์ธํฉ๋๋ค.
_CrtMemCheckpoint
๋ ์ค๋
์ ์ ๋ณด๋ฅผ ์์ฑํ๋ ํจ์์
๋๋ค. ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ , ํ์ ์ค๋
์์ ์์ฑํฉ๋๋ค.
_CrtMemDifference
๋ ๋ ์ค๋
์์ ์ ๋ณด๋ฅผ ๋น๊ตํ๊ณ , ์ฐจ์ด๊ฐ ์์ผ๋ฉด ์ฐจ์ด์ ์ ๋ณด๋ฅผ ์์ฑํฉ๋๋ค.
_CrtMemDumpStatistics
๋ ์ค๋
์ ์ ๋ณด ๊ตฌ์กฐ์ฒด์ธ _CrtMemState
๋ฅผ ์ธ์๋ก ๋ฐ์ ์ถ๋ ฅ ์ฐฝ์ ์ ๋ณด๋ฅผ ํ์ํฉ๋๋ค.
๋๋ฒ๊ทธ ๋ชจ๋๋ก ์คํ ํ ์ข ๋ฃํ๋ฉด, ์๋์ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
// ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ ๋ฉ์์ง
0 bytes in 0 Free Blocks.
0 bytes in 0 Normal Blocks.
19122 bytes in 113 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 19122 bytes.
Total allocations: 44955 bytes.
// ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํ ๋ฉ์์ง
0 bytes in 0 Free Blocks.
100 bytes in 1 Normal Blocks.
19122 bytes in 113 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 19222 bytes.
Total allocations: 45055 bytes.
// ๋ ์ค๋ ์์ ์ฐจ์ด ๋ฉ์์ง
0 bytes in 0 Free Blocks.
100 bytes in 1 Normal Blocks.
0 bytes in 0 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 100 bytes.
Total allocations: 100 bytes.
Detected memory leaks!
Dumping objects ->
c:\users\gg\desktop\consoleapplication1\consoleapplication1\consoleapplication1.cpp(22) : {164} normal block at 0x000A6010, 100 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.
์ฐจ์ด์ ์ ๋ณด๋ฅผ ๋ณด๋ฉด Total allocations: 100 bytes.
๊ฐ ํ์๋์ด ์์ต๋๋ค. ์ ํํ๊ฒ ์ ๋ณด๋ฅผ ํ์ํฉ๋๋ค.
๋ง์ฝ, ์ฌ๋ฐ๋ฅด๊ฒ delete[] ptr;
์ ์ ์์ ์ผ๋ก ํธ์ถํ๋ฉด ๊ฒฐ๊ณผ๊ฐ ์ด๋จ๊น์?
0 bytes in 0 Free Blocks.
0 bytes in 0 Normal Blocks.
15026 bytes in 112 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 16530 bytes.
Total allocations: 40859 bytes.
// ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ํ
0 bytes in 0 Free Blocks.
0 bytes in 0 Normal Blocks.
15026 bytes in 112 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 16530 bytes.
Total allocations: 40959 bytes.
์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด, ๋ ์ค๋ ์์ ์ ๋ณด๊ฐ ๋์ผํ์ฌ ๋ฐ๋ก ์ถ๋ ฅ๋ ๋ฉ์์ง๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฉ์์ง๋ ๋ณด์ด์ง ์์ต๋๋ค.
'Programming > Debugging' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[๋๋ฒ๊น ] ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ ๊ฒํ๋ ๋ฐฉ๋ฒ - ์์ ๊ด๋ฆฌ์
[๋๋ฒ๊น ] ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ ๊ฒํ๋ ๋ฐฉ๋ฒ - ์์ ๊ด๋ฆฌ์
2020.04.25 -
[๋๋ฒ๊น ] ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ ๊ฒํ๋ ๋ฐฉ๋ฒ - ์ฑ๋ฅ ํ๋กํ์ผ๋ฌ
[๋๋ฒ๊น ] ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ ๊ฒํ๋ ๋ฐฉ๋ฒ - ์ฑ๋ฅ ํ๋กํ์ผ๋ฌ
2020.04.17 -
[๋๋ฒ๊น ] ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ ๊ฒํ๋ ๋ฐฉ๋ฒ - CRTDBG (์์ ํฌํจ)
[๋๋ฒ๊น ] ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ ๊ฒํ๋ ๋ฐฉ๋ฒ - CRTDBG (์์ ํฌํจ)
2020.04.11 -
[๋๋ฒ๊น ] ๋ฉ๋ชจ๋ฆฌ ๋์์ ์ ๊ฒํ๋ ๋ฐฉ๋ฒ ์๊ฐ
[๋๋ฒ๊น ] ๋ฉ๋ชจ๋ฆฌ ๋์์ ์ ๊ฒํ๋ ๋ฐฉ๋ฒ ์๊ฐ
2020.04.11