C , C++, C#

[C++] StackWalker64 / 스텍 추적

vhxpffltm 2022. 2. 13. 16:55

Visual Studio에서 _asm 키워드때문에 가져온 문제이다.

 

먼저, 64비트에서는 더이상 MSVC 친구가 _asm 키워드를 지원하지 않는다.

 

그래서 보통 _asm 코드를 새로 만들어서 Visual studio에서 링크를 새로 걸어 처리하는 방식이다.

 

그런데

 

Windows api에 _asm에 적힌 메모리 추적 관련 함수를 제공하고 있었다.

 

그래서 _asm 어셈블리 코드의 내용과 같은 기능을 코드로 적용하는 방식이 있다.

 

그와 관련해서 2가지 api가 존재한다.

 

이중에서 Stackwalk64가 유명한것 같다. 필자는 _AddressOfReturnAddress api로 원래의 _asm 코드와 같은 코드를 만들어서 처리했다. 

 

 

StackWalker64를 활용한? 스레드 및 call stack을 확인할 수 있는 opensource가 존재한다. 이를 활용해서 call stack 추적 테스트를 보완할 수 있을것이다.

 

https://github.com/JochenKalmbach/StackWalker  

 

GitHub - JochenKalmbach/StackWalker: Walking the callstack in windows applications

Walking the callstack in windows applications. Contribute to JochenKalmbach/StackWalker development by creating an account on GitHub.

github.com

 

 

https://docs.microsoft.com/en-us/cpp/intrinsics/addressofreturnaddress?view=msvc-170 

 

_AddressOfReturnAddress

Learn more about: _AddressOfReturnAddress

docs.microsoft.com

 

https://docs.microsoft.com/ko-kr/windows/win32/api/dbghelp/nf-dbghelp-stackwalk64

 

StackWalk64 function (dbghelp.h) - Win32 apps

Obtains a stack trace.

docs.microsoft.com