ロゴ メインコンテンツへ
RSSフィード
「ソフトウェア開発」に関連する記事一覧

C++ Windowsでスタックバックトレース

2013/08/10 18:22
(この記事の文字数: 238)

C++で簡易Assert用のマクロを作っていて、スタックバックトレースしたくなったのですが、Windowsで簡単にコールスタックを出力する方法がないか探してみたところ、下記のリンク先に書いてある関数が短くていい感じだったので、リンクを貼っておきます。

http://stackoverflow.com/questions/5693192/win32-backtrace-from-c-code

こちらにもincludeなども含めてソースコード載せておきます。

Source Code:


#include <windows.h>
#include <imagehlp.h>

#pragma comment(lib, "imagehlp.lib")

void printStack( void )
{
     unsigned int   i;
     void         * stack[ 100 ];
     unsigned short frames;
     SYMBOL_INFO  * symbol;
     HANDLE         process;

     process = GetCurrentProcess();

     SymInitialize( process, NULL, TRUE );

     frames               = CaptureStackBackTrace( 0, 100, stack, NULL );
     symbol               = ( SYMBOL_INFO * )calloc( sizeof( SYMBOL_INFO ) + 256 * sizeof( char ), 1 );
     symbol->MaxNameLen   = 255;
     symbol->SizeOfStruct = sizeof( SYMBOL_INFO );

     for( i = 0; i < frames; i++ )
     {
         SymFromAddr( process, ( DWORD64 )( stack[ i ] ), 0, symbol );

         printf( "%i: %s - 0x%0X\n", frames - i - 1, symbol->Name, symbol->Address );
     }

     free( symbol );
}


  このエントリーをはてなブックマークに追加  

<<「ソフトウェア開発」の記事一覧に戻る

<<「ソフトウェア開発」の次の記事
「ソフトウェア開発」の前の記事 >>

コメント(0 件)



コンテンツロード: 0.007 sec
Copyright(C)2006-2024 puarts All Rights Reserved