[๋๋ฒ๊น ] ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ ๊ฒํ๋ ๋ฐฉ๋ฒ - 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๋ฉ๋ชจ๋ฆฌ ๋์์ ๊ด๋ จ๋ ํฌ์คํ ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์. [๋๋ฒ๊น ] ๋ฉ๋ชจ๋ฆฌ ๋์์ ์ ๊ฒํ๋ ๋ฐฉ๋ฒ ์๊ฐ [๋๋ฒ๊น ] ๋ฉ๋ชจ๋ฆฌ ๋์์ ์ ๊ฒํ๋ ๋ฐฉ๋ฒ ์๊ฐ ์๊ฐ Unmanaged Code์ธ C++์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ง์ ํด์ฃผ์ด์ผ ํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ํด์ ๋ฅผ ํ์ง ์์ผ๋ฉด, ๊ทธ๋๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ์ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋์๋ ์ด๋ป๊ฒ ์ ๊ฒํ ๊น์? ์ โฆ luckygg.tistory.com MFC Dialog ์์ MFC Dialog ํ๋ก์ ํธ ์์ ๋ฅผ ํตํด ๊ณ ์๋ก ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐ์์์ผ ๋ณด๊ฒ ์ต๋๋ค. Main Dialog์ ๋ค์๊ณผ ๊ฐ์ด ๋ฉค๋ฒ ๋ณ์๋ก byteํ ํฌ์ธํฐ๋ฅผ ์ ์ธํฉ๋๋ค. byte* m_pBuffer; ๊ทธ๋ฆฌ๊ณ ๋ฒํผ์ ์ถ๊ฐํ๊ณ , ๋ฒํผ ํด๋ฆญ ์ ๋ค์๊ณผ ๊ฐ์ด 100byte๋ฅผ ๋์ ํ ๋น ํ๋๋ก ์ฝโฆ -
[๋๋ฒ๊น ] ๋ฉ๋ชจ๋ฆฌ ๋์์ ์ ๊ฒํ๋ ๋ฐฉ๋ฒ ์๊ฐ
[๋๋ฒ๊น ] ๋ฉ๋ชจ๋ฆฌ ๋์์ ์ ๊ฒํ๋ ๋ฐฉ๋ฒ ์๊ฐ
2020.04.11
๋๊ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.