VS 周りのミニ Tips 集

ここでは Visual Studio に関するミニ Tips 集を紹介します。
意外と知らないことがあるかもしれません。

目次


Visual Studio のソリューションファイルを Expless Edition 版で特定のプロジェクトとして開く方法

Visual Studio (有償版)のソリューションファイルを Expless Edition (無償)版で開こうとした時、
開けなかったり、いくつかの言語版をインストールしていた場合は何で開くか(C++ なのか VB なのか)を選択するダイアログが出たりします。
これをきちんと開く様にする方法です。

やり方は単純です。
まず、ソリューションファイル(*.sln)をテキストエディタで開きます。(ソリューションファイルはテキスト形式なので開けます)
中身をみると、2、3行目辺りに # で始まる行があります。
実はここの行で Visual Studio は何で開くのかを判断しています。

有償版の場合は全ての機能が統合されているので、形式的におかしくない限り読み込んでくれますが、
無償版では、この一行から判断しています。

無償版で作成したプロジェクトの場合、ここの行が
# Visual C++ Express 2008
となっています(C++の場合)。

有償版では、
# Visual Studio 2008
となっており、無償版で開くときにどれを開けばいいのかをここから読み取ることができません。

なので、無償版で開くときに特定できるようにするには、その一行を目的の名前に変更するだけです。


リリース版の実行ファイルのサイズをより小さくする方法

実は、リリース版でもデフォルトの設定ではデバッグ情報が実行ファイルに含まれます。
これはリリース版でバグが判明したときにコード上のどこで起きたのかを調べやすくするためです。

このデバッグ情報を含めないようにすることでサイズを小さくするのがここで紹介する方法なのですが、
この方法を行うと、バグが発生したときにどこのコード上で発生したかどうかを容易に判別できなくなりますので注意してください。

まず、対象のプロジェクトのプロパティを開き、ダイアログ上部にある構成をリリース版(デフォルトでは「Release」)にします。
そして、リンカ、デバッグを選択し、そのページ内にある「デバッグ情報の生成」の欄を「いいえ」に変更して適用します。

これでリビルドしなおせば、少しスリム化したものが出来上がります。

なお、リンカ設定は DLL や 実行ファイルを作る場合のみ現れます。
ライブラリの場合は、プロジェクトのプロパティ内の、 C/C++、全般のページで、
デバッグ情報の形式を「無効」にすることで小さくできます。


メモリリークの検出方法

crtdbg.h をインクルードし、実行直後に _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF) を呼び出すだけで、
プログラムの終了後にメモリリークが発生していた場合にデバッグ出力にその一覧が表示されます。

また、メモリリークしている、そのメモリ領域を確保した場所を特定する方法もあります。

上記の状態で、プロジェクトのプロパティから、C/C++、プリプロセッサのページにある、「プリプロセッサの定義」の欄に、
_CRTDBG_MAP_ALLOC を付け足します。(セミコロン’;’で区切るのを忘れずに)
とりあえずこれで malloccalloc などの関数で確保した場所が表示されます。
しかし、 C++ の new で確保した場所は正しい場所を指してくれません。
これを解消するには、以下のように new をマクロで関数に置き換えます。


#include
#ifdef USE_CAPITAL_NEW
#define NEW  ::new(_NORMAL_BLOCK, __FILE__, __LINE__)
#else /* USE_CAPITAL_NEW */
#define new  ::new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif /* USE_CAPITAL_NEW */

new 演算子をオーバーロードで置き換えるマクロなので、プログラム内でオーバーロードしている場合は、エラーが出ます。
そのため、上記のコードでは代わりに NEW で指定したときに適用するように工夫を入れています。


デバッグの機能

通常、デバッグ実行ではエラーが発生した時にその場所を示してくれたり、
プレークポイントをセットして、変数の状態を確認することができます。
そのほかにも、下記のように出来ることが色々あります。

  • ブレークポイントなどで停止中、変数の値を変更して実行させることができる。(変数の値をダブルクリックで変更可能)
  • 次に実行する時に開始する位置をずらす。(左端にある右矢印を目的の行にドラックする。ただし正しく実行できなくなる恐れがあるので注意)
  • メモリダンプを見る。(「デバッグ」メニューからウインドウ、メモリ、メモリ1を選択。)
  • デバッグ出力ウインドウ上で右クリックすることで出力する各種メッセージの出力を切り替えることができる。
  • Shift+F5 でデバッグ終了。(マウスが利かなくなったり、停止ボタンが押せなくなってしまったときに有効)