Programming/Debugging

[디버깅] λ©”λͺ¨λ¦¬ λˆ„μˆ˜μ™€ μ κ²€ν•˜λŠ” 방법 μ†Œκ°œ

γ€€β€πŸ˜πŸ˜Š 2020. 4. 11. 23:12
λ°˜μ‘ν˜•

μ†Œκ°œ

Unmanaged Code인 C++은 λ©”λͺ¨λ¦¬ ν• λ‹Ήκ³Ό ν•΄μ œλ₯Ό κ°œλ°œμžκ°€ 직접 ν•΄μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€. λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜κ³  ν•΄μ œλ₯Ό ν•˜μ§€ μ•ŠμœΌλ©΄, κ·ΈλŒ€λ‘œ λ©”λͺ¨λ¦¬κ°€ 점유되기 λ•Œλ¬Έμž…λ‹ˆλ‹€. 그런데 λ©”λͺ¨λ¦¬ λˆ„μˆ˜λŠ” μ–΄λ–»κ²Œ μ κ²€ν• κΉŒμš”? μ κ²€ν•˜λŠ” λ°©λ²•μœΌλ‘œλŠ” μ†ŒμŠ€ μ½”λ“œμ—μ„œ ν•˜λŠ” 방법과 Visual Studio의 μ„±λŠ₯ ν”„λ‘œνŒŒμΌλŸ¬λ₯Ό μ΄μš©ν•˜λŠ” 방법, μž‘μ—… κ΄€λ¦¬μžλ₯Ό μ΄μš©ν•˜λŠ” 방법 λ“± λͺ‡ 가지가 μžˆμŠ΅λ‹ˆλ‹€. 이번 ν¬μŠ€νŒ…μ„ 톡해 λ©”λͺ¨λ¦¬ λˆ„μˆ˜μ˜ μœ„ν—˜μ„±κ³Ό μ κ²€ν•˜λŠ” 방법에 λŒ€ν•΄ μ†Œκ°œν•˜κ² μŠ΅λ‹ˆλ‹€.

λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak)

λ©”λͺ¨λ¦¬ λˆ„μˆ˜λž€, ν”„λ‘œκ·Έλž¨ ꡬ동 쀑에 ν•„μš”μΉ˜ μ•Šμ€ λ©”λͺ¨λ¦¬κ°€ κ³„μ†ν•΄μ„œ μ μœ ν•˜κ³  μžˆλŠ” ν˜„μƒμž…λ‹ˆλ‹€. 정상적인 λ™μž‘μ΄λΌλ©΄ λ©”λͺ¨λ¦¬ ν• λ‹Ή ν›„ ν•΄μ œν•΄μ•Ό λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ μ—†μ§€λ§Œ, 개발자의 μ‹€μˆ˜λ‘œ ν•΄μ œλ₯Ό 놓쳀닀면 λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ λ°œμƒν•˜κ²Œ λ©λ‹ˆλ‹€. 사싀 μš”μ¦˜ PC의 κΈ°λ³Έ 사양은 64bit μš΄μ˜μ²΄μ œμ™€ 8GB, 16GB μ΄μƒμ˜ λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•˜λŠ”λ°, λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ λ¬Έμ œκ°€ λ κΉŒμš”?

λ„€, λ‹Ήμ—°νžˆ λ¬Έμ œκ°€ λ©λ‹ˆλ‹€. λ¬Όλ‘ , ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ ν›„ μ’…λ£Œ μ‹œ λ°œμƒν•˜λŠ” λ©”λͺ¨λ¦¬ λˆ„μˆ˜λΌλ©΄ μΌνšŒμ„± 정도라 여겨 λ„˜κΈ°λŠ” κ²½μš°λ„ μžˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œκ·Έλž¨ 개발 μ‹œκ°„μ— 쫓겨 λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ μ–΄λ””μ„œ λ°œμƒν•˜λŠ”μ§€ 찾을 μ‹œκ°„μ΄ μ—†μ–΄ κ·Έλƒ₯ λ¬΄μ‹œν•˜λ”κ΅°μš”. 단지, ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ  λ•Œλ§Œ λ°œμƒν•˜λ‹ˆκΉŒμš”.

ν•˜μ§€λ§Œ, ν”„λ‘œκ·Έλž¨ ꡬ동 쀑 κ³„μ†ν•΄μ„œ λˆ„μˆ˜λ˜λŠ” κ²½μš°λŠ” μ–΄λ–¨κΉŒμš”? 아무리 μž‘μ€ 크기의 λ©”λͺ¨λ¦¬ λˆ„μˆ˜λΌλ„ λͺ‡ μ‹œκ°„, λ©°μΉ , λͺ‡ 달 μ΄μƒμœΌλ‘œ λˆ„μ λ˜λ©΄ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λŠ” μ‹¬κ°ν•΄μ§‘λ‹ˆλ‹€. λ©”λͺ¨λ¦¬ 점유율이 100%에 μœ‘λ°•ν•˜λ©΄ μœˆλ„μš°κ°€ μ „μ²΄μ μœΌλ‘œ λŠλ €μ§€κ³  λ‹€μš΄λœ κ²ƒμ²˜λŸΌ λ²„λ²…κ±°λ¦¬λŠ” ν˜„μƒμ΄ λ°œμƒν•©λ‹ˆλ‹€. μ–‘μ‚° 라인에 적용된 μž₯λΉ„ PCμ—μ„œ 이런 μ΄μŠˆκ°€ λ°œμƒν•˜μ—¬ PCλ₯Ό μž¬λΆ€νŒ…ν•΄μ•Ό ν•˜λŠ” 상황이 μ˜¨λ‹€λ©΄ 정말 λ”μ°ν•˜κ² μ£ ?

λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 점검 방법

λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό μ κ²€ν•˜λŠ” λͺ‡ 가지 방법을 μ†Œκ°œν•©λ‹ˆλ‹€.

[디버깅] λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό μ κ²€ν•˜λŠ” 방법 - CRTDBG (예제 포함)

[디버깅] λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό μ κ²€ν•˜λŠ” 방법 - CRTDBG Snapshot(예제 포함)

[디버깅] λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό μ κ²€ν•˜λŠ” 방법 - μ„±λŠ₯ ν”„λ‘œνŒŒμΌλŸ¬

[디버깅] λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό μ κ²€ν•˜λŠ” 방법 - μž‘μ—… κ΄€λ¦¬μž

λ°˜μ‘ν˜•