パソコンでプログラミングしよう ウィンドウズC++プログラミング環境の構築
1.6.3.6(15)
wxWidgetsをビルドする

wxWidgetsライブラリを自分でビルドする手順を説明し、これを含めたデバッグ方法を示す。

本サイトはMSYS2wxWidgetsライブラリを導入した。これは簡便であるものの必ずしも最新版が得られず、ライブラリ内部までデバッガが追跡できないというデメリットがある。本項目はwxWidgetsをソースコードからビルドするが、特にデバッグバージョンでライブラリ内部までデバッガを追跡させるための方法を示す。本項目はバージョン3.1.4を前提に記述する。

ソースコード

ダウンロード

リンク先からwxWidgets-3.1.4.zipをダウンロードする。

ディレクトリ配置

ディレクトリは以下とする。異なるバージョンのソースコード展開ディレクトリはwxWidgetsルートの配下に並列させる。

目的 ディレクトリ
wxWidgetsルート C:\wxWidgets
ソースコードの展開 C:\wxWidgets\wxWidgets-3.1.4
ビルドの出力 C:\wxWidgets\wxWidgets-3.1.4\my_builds\[ビルド名]

zipファイルをwxWidgetsルートに置きエクスプローラー右クリック[すべて展開]で[圧縮(ZIP)形式フォルダーの展開]ダイアログをデフォルトのまま[展開]する。展開されるファイルには多様なビルド用ファイルが含まれるが、本サイトはconfigure(コンフィグレーションスクリプト)ファイルを用いるので他の記述は省く。本項目での相対パスは展開ディレクトリ(C:\wxWidgets\wxWidgets-3.1.4)からとする。

ディレクトリ ファイル 内容
C:\wxWidgets
└ wxWidgets-3.1.4 configure コンフィグレーションスクリプト
 │ Makefile.in メイクファイル(Makefile)テンプレート
 │ setup.h.in ライブラリ設定インクルード(setup.h)テンプレート
 │ ... ...
 ├ include
 │├ wx *.h ライブラリインクルード
 ││├ msw *.h ウインドウズ実装依存インクルード
 │││ genrcdefs.h ウィンドウズリソース定義(rcdefs.h)テンプレート
 ││├ ... *.h その他の実装依存インクルード
 ││︙ ... ...
 │└ msvc ... マイクロソフトVC++用の追加
 ├ src
 │├ msw *.cpp ウィンドウズ実装依存ソースコード
 │├ ... *.cpp その他のソースコード
 │︙ ... ...
 ├ demos ... (デモ用ソースコードディレクトリ)
 ├ samples ... (サンプル用ソースコードディレクトリ)
 ├ tests ... (テスト用ソースコードディレクトリ)
 ├ utils ... (ユーティリティ用ソースコードディレクトリ)
 ├ docs ... (ドキュメントディレクトリ)
 ︙

例えばinclude\wx\mswディレクトリにsetup.hやrcdefs.hというファイルが存在するもののconfigureによるビルドはこれらを使わない。本サイトはsetup.h(ライブラリ設定インクルード)にパッチを当てるが、こういった理由でinclude\wx\msw\setup.hではなく展開ディレクトリのsetup.h.inにパッチを当てる。

ライブラリ設定インクルードの修正

バージョン3.1.0以降ではライブラリ設定インクルードにパッチを当ててウィンドウズのDirect2Dレンダリングサポートを有効化させる。これはマイクロソフトVC++をコンパイラとする場合はデフォルトで有効だがmingw-w64では無効となっていて、そのままでは例えばCode::Blocksビルドできない。

setup.h.inのwxUSE_GRAPHICS_DIRECT2Dマクロ定義を以下に修正する。

...
/* --- start MSW options --- */
#define wxUSE_GRAPHICS_GDIPLUS wxUSE_GRAPHICS_CONTEXT
//********************************* Kodama modified (Dec.25,2020)
//********************************* to compile CB20.03.
//#if defined(_MSC_VER) && _MSC_VER >= 1600
// #define wxUSE_GRAPHICS_DIRECT2D wxUSE_GRAPHICS_CONTEXT
//#else
// #define wxUSE_GRAPHICS_DIRECT2D 0
//#endif
#define wxUSE_GRAPHICS_DIRECT2D wxUSE_GRAPHICS_CONTEXT
//*********************************
...

既にconfigureを実行済みの場合はテンプレートファイルから作成したsetup.h(例えばmy_builds\debug64_monodll\lib\wx\include\msw-unicode-3.1\wx\setup.h)にも同様の修正を施す。

ビルド

本サイトはconfigureスクリプトでメイクファイル(Makefile)、ライブラリ設定インクルード(setup.h)、ウィンドウズリソース定義(rcdefs.h)などを作成し、MSYS2のmakeコマンドツールでビルドする。configureはautomakeツールが生成したソースコード修正スクリプトで、Makefile.inとsetup.h.inにオプション修正を施してMakefileとsetup.hを出力する。rcdefs.hはgenrcdefs.hからC++プリプロセッサで生成する。configure、Makefile.in、setup.h.in、genrcdefs.hはwxWidgetsの配布ソースコードに同梱されている。configureとmakeはMSYS2環境を前提とし、mingw32/mingw64サブシステムのPOSIX互換ターミナルで作業して32ビット/64ビットライブラリをビルドする。

オプション設定

32ビット/64ビットの選択以外はconfigureオプションで設定する。本サイトのオプション設定は以下に限定するが、設定可能な全オプションはconfigure --helpで知ることができる。

configureオプション 機能
--enable-monolithic 単一ファイルにビルドする(モノリシック) モノリシック 非モノリシック
--enable-debug デバッグ用ライブラリをビルドする デバッグ(-g -O0) リリース(-O2)
--disable-shared スタティックリンクライブラリをビルドする スタティック(lib) ダイナミック(dll)

以下に各ビルドのオプションをまとめるが、本当に必要とするものだけをビルドすれば良い。本サイトもdebug64_monodllとreleasel64_monodllのみビルド確認している。

ビルド名 サブシステム configureオプション
debug32_monodll mingw32 --enable-monolithic --enable-debug
debug32_monolib --enable-monolithic --enable-debug --disable-shared
debug32_polydll --enable-debug
debug32_polylib --enable-debug --disable-shared
release32_monodll --enable-monolithic
release32_monolib --enable-monolithic --disable-shared
release32_polydll
release32_polylib --disable-shared
debug64_monodll mingw64 --enable-monolithic --enable-debug
debug64_monolib --enable-monolithic --enable-debug --disable-shared
debug64_polydll --enable-debug
debug64_polylib --enable-debug --disable-shared
release64_monodll --enable-monolithic
release64_monolib --enable-monolithic --disable-shared
release64_polydll
release64_polylib --disable-shared

ビルド

展開ディレクトリにmy_buildsディレクトリを作成し、さらに各ビルドの出力ディレクトリを作成する。同梱のドキュメント(docs\msw\install.md)は展開ディレクトリ配下に出力を置くことを推奨しないが、複数バージョンの管理を容易とするため本サイトはあえてこの方法を選択する。configure、makeの実行は環境変数WXWINに展開ディレクトリ名が代入されている必要がある。

configureの作成するMakefileはinstallフォニーターゲットを持つが、これをターゲットとしてメイクする(make install)とmingw32/mingw64サブシステムのinclude/lib/binディレクトリのwxWidgetsファイルを上書きする。本サイトのセットアップはMSYS2で既にwxWidgetsライブラリを導入しており、この上書きは危険な結果を招きかねない。デフォルトターゲットによるメイク(make)でカレント配下への出力に限定してMSYS2導入や他バージョンとの共存を図る。

debug64_monodllを例にビルド方法を示す。

  1. mingw64ターミナルを起動する。
  2. 環境変数WXWINを設定してmy_buildsディレクトリへ移動する。my_buildsディレクトリが無い場合は作成する。my_buildsディレクトリにdebug64_monodllディレクトリ(出力ディレクトリ)を作成して移動する。
    user@THINKPAD-L430 MINGW64 ~
    $ export WXWIN=/c/wxWidgets/wxWidgets-3.1.4
    user@THINKPAD-L430 MINGW64 ~
    $ cd $WXWIN/my_builds
    user@THINKPAD-L430 MINGW64 /c/wxWidgets/wxWidgets-3.1.4/my_builds
    $ mkdir debug64_monodll
    user@THINKPAD-L430 MINGW64 /c/wxWidgets/wxWidgets-3.1.4/my_builds
    $ cd debug64_monodll
    user@THINKPAD-L430 MINGW64 /c/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll
    $
  3. configureに適切なオプションを与えて実行する。
    user@THINKPAD-L430 MINGW64 /c/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll
    $ $WXWIN/configure --enable-monolithic --enable-debug
    ...
    Configured wxWidgets 3.1.4 for `x86_64-w64-mingw32'
    Which GUI toolkit should wxWidgets use? msw
    Should wxWidgets be compiled into single library? yes
    Should wxWidgets be linked as a shared library? yes
    Should wxWidgets support Unicode? yes (using wchar_t)
    What level of wxWidgets compatibility should be enabled?
    wxWidgets 2.8 no
    wxWidgets 3.0 yes
    Which libraries should wxWidgets use?
    STL no
    jpeg sys
    png sys
    regex builtin
    tiff sys
    lzma yes
    zlib sys
    expat sys
    libmspack no
    sdl no
    user@THINKPAD-L430 MINGW64 /c/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll
    $
  4. デフォルトターゲットでメイクする。
    user@THINKPAD-L430 MINGW64 /c/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll
    $ make
    ...
    make[1]: ディレクトリ '/c/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll/utils/wxrc' に入ります
    /c/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll/bk-deps g++ -c -o wxrc_wxrc.o -D_FILE_OFFSET_BITS=64 -IC:/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll/lib/wx/include/msw-unicode-3.1 -I../../../../include -D__WXMSW__ -I../../../../utils/wxrc -DWXUSINGDLL -DwxUSE_GUI=0 -Wall -Wundef -Wunused-parameter -Wno-ctor-dtor-privacy -Woverloaded-virtual -g -O0 ../../../../utils/wxrc/wxrc.cpp
    g++ -o wxrc.exe wxrc_wxrc.o -LC:/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll/lib -lexpat -lwx_mswu-3.1 -lwxregexu-3.1 -lz -lrpcrt4 -loleaut32 -lole32 -luuid -llzma -luxtheme -lwinspool -lwinmm -lshell32 -lshlwapi -lcomctl32 -lcomdlg32 -ladvapi32 -lversion -lwsock32 -lgdi32 -loleacc -lexpat -lpng -lz -ljpeg -LC:/msys64/mingw64/lib -ltiff -llzma -lz -lrpcrt4 -loleaut32 -lole32 -luuid -llzma -luxtheme -lwinspool -lwinmm -lshell32 -lshlwapi -lcomctl32 -lcomdlg32 -ladvapi32 -lversion -lwsock32 -lgdi32 -loleacc
    make[1]: ディレクトリ '/c/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll/utils/wxrc' から出ます
    user@THINKPAD-L430 MINGW64 /c/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll
    $

ディレクトリ配置

configureおよびmakeが出力ディレクトリ(my_builds\debug64_monodll)に生成するファイルの配置を示す。configureは...\Makefile、...\lib\include\msw-unicode-3.1\wx\setup.h、...\lib\include\msw-unicode-3.1\wx\msw\rcdefs.hを生成する。makeはMakefileを用いて...\libディレクトリにライブラリファイルを出力する。なおconfigureは他にデモ、サンプル、テスト、ユーティリティをビルドするための...\demos、...\samples、...\tests、...\utilsディレクトリを作成して各プロジェクトのMakefileを配置するが、それらのソースコードは展開ディレクトリ直下の同名ディレクトリに存在する。

ディレクトリ ファイル 内容
C:\wxWidgets
└ wxWidgets-3.1.4 ... ...
 ├ include
 │︙ ... ...
 ├ src
 │︙ ... ...
 ├ my_builds
 │├ debug64_monodll Makefile メイクファイル
 │││ *.o オブジェクト
 ││├ lib *.a スタティックリンクライブラリ
 ││|│ *.dll.a DLLインポートライブラリ
 ││|│ *.dll ダイナミックリンクライブラリ
 ││|└ wx ... ...
 ││| ├ config ... ...
 ││| └ include
 ││|  └ msw-unicode-3.1
 ││|   └ wx setup.h ライブラリ設定インクルード
 ││|    └ msw rcdefs.h ウィンドウズリソース定義
 ││├ demos ... (デモ用ビルドディレクトリ)
 ││├ samples ... (サンプル用ビルドディレクトリ)
 ││├ tests ... (テスト用ビルドディレクトリ)
 ││└ utils ... (ユーティリティ用ビルドディレクトリ)
 │︙
 ︙

クライアントプロジェクトがビルドしたwxWidgetsを利用するにはコンパイラ/リンカ/リソースコンパイラ探索にMSYS2導入より優先してディレクトリを追加する。さらにプロジェクトはソースコードに<wx/setup.h>をインクルードし、ウィンドウズリソースに<wx/msw/wx.rc>を経由して<wx/msw/rcdefs.h>をインクルードする。これらはincludeとmy_builds\debug64_monodll\include\msw-unicode-3.1の両方に存在するが、configureの生成した後者を使用する。

種類 MSYS2より前置するディレクトリ
インクルード C:\wxWidgets\wxWidgets-3.1.4\my_builds\debug64_monodll\lib\wx\include\msw-unicode-3.1
C:\wxWidgets\wxWidgets-3.1.4\include
ライブラリ C:\wxWidgets\wxWidgets-3.1.4\my_builds\debug64_monodll\lib
リソースインクルード C:\wxWidgets\wxWidgets-3.1.4\my_builds\debug64_monodll\lib\wx\include\msw-unicode-3.1
C:\wxWidgets\wxWidgets-3.1.4\include

ダイナミックリンクでビルドするとDLLファイルを...\libに出力する。これを利用するにはDLLをプログラムと同じディレクトリにコピーするか、あるいは実行パス(環境変数PATH)を通す。

種類 MSYS2より前置するディレクトリ
実行パス(PATH) C:\wxWidgets\wxWidgets-3.1.4\my_builds\debug64_monodll\lib

サンプルアプリケーション

デモ用、サンプル用、テスト用、ユーティリティ用ビルドディレクトリおよび各サブディレクトリにはそれぞれMakefileを持ち、各ディレクトリでデフォルトターゲットをメイクすれば各プログラムをビルドする。例えばサンプル用ビルドディレクトリでmakeすれば全サブディレクトリをビルドし、minimalサブディレクトリでmakeすればminimalサンプルアプリケーションだけをビルドする。minimalをビルドしてwxWidgetsが正しくビルドされていることを確認する。

  1. mingw64ターミナルを起動する。
  2. wxWidgetsビルドと異なり環境変数WXWINは必ずしも必要としないが、便宜的に設定してminimalディレクトリへ移動する。
    user@THINKPAD-L430 MINGW64 ~
    $ export WXWIN=/c/wxWidgets/wxWidgets-3.1.4
    user@THINKPAD-L430 MINGW64 ~
    $ cd $WXWIN/my_builds/debug64_monodll/samples/minimal
    user@THINKPAD-L430 MINGW64 /c/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll/samples/minimal
    $
  3. デフォルトターゲットでメイクする。
    user@THINKPAD-L430 MINGW64 /c/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll/samples/minimal
    $ make
    windres -i../../../../samples/minimal/../../samples/sample.rc -ominimal_sample_rc.o --define wxUSE_DPI_AWARE_MANIFEST=2 --define __WXMSW__ --include-dir ../../../../samples/minimal --define WXUSINGDLL --include-dir ../../../../samples/minimal/../../samples --include-dir C:/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll/lib/wx/include/msw-unicode-3.1 --include-dir ../../../../include
    /c/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll/bk-deps g++ -c -o minimal_minimal.o -D_FILE_OFFSET_BITS=64 -IC:/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll/lib/wx/include/msw-unicode-3.1 -I../../../../include -D__WXMSW__ -I../../../../samples/minimal -DWXUSINGDLL -I../../../../samples/minimal/../../samples -Wall -Wundef -Wunused-parameter -Wno-ctor-dtor-privacy -Woverloaded-virtual -g -O0 ../../../../samples/minimal/minimal.cpp
    g++ -o minimal.exe minimal_sample_rc.o minimal_minimal.o -LC:/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll/lib -mwindows -lwx_mswu-3.1 -lwxscintilla-3.1 -lwxregexu-3.1 -lz -lrpcrt4 -loleaut32 -lole32 -luuid -llzma -luxtheme -lwinspool -lwinmm -lshell32 -lshlwapi -lcomctl32 -lcomdlg32 -ladvapi32 -lversion -lwsock32 -lgdi32 -loleacc -lexpat -lpng -lz -ljpeg -LC:/msys64/mingw64/lib -ltiff -llzma -lz -lrpcrt4 -loleaut32 -lole32 -luuid -llzma -luxtheme -lwinspool -lwinmm -lshell32 -lshlwapi -lcomctl32 -lcomdlg32 -ladvapi32 -lversion -lwsock32 -lgdi32 -loleacc
    user@THINKPAD-L430 MINGW64 /c/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll/samples/minimal
    $
  4. wxWidgetsをダイナミックリンクでビルドしたのでDLLにパスを通す。スタティックリンクであれば不要である。
    user@THINKPAD-L430 MINGW64 /c/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll/samples/minimal
    $ export PATH=$WXWIN/my_builds/debug64_monodll/lib:$PATH
    user@THINKPAD-L430 MINGW64 /c/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll/samples/minimal
    $
  5. 実行する。
    user@THINKPAD-L430 MINGW64 /c/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll/samples/minimal
    $ ./minimal
    user@THINKPAD-L430 MINGW64 /c/wxWidgets/wxWidgets-3.1.4/my_builds/debug64_monodll/samples/minimal
    $

minimalはウィンドウズからも起動できるがラインタイムライブラリもダイナミックリンクなのでそのパスも追加する。

Microsoft Windows [Version 10.0.18363.1256]
(c) 2019 Microsoft Corporation. All rights reserved.
C:\wxWidgets\wxWidgets-3.1.4\my_builds\debug64_monodll\samples\minimal>set PATH=C:\wxWidgets\wxWidgets-3.1.4\my_builds\debug64_monodll\lib;C:\msys64\mingw64\bin;%PATH%
C:\wxWidgets\wxWidgets-3.1.4\my_builds\debug64_monodll\samples\minimal>minimal
C:\wxWidgets\wxWidgets-3.1.4\my_builds\debug64_monodll\samples\minimal>

Code::Blocksからの利用

本サイト導入のCode::BlocksカスタマイズでMSYS2導入wxWidgets利用を前提とする。その代わりにdebug64_monodllビルドを利用する方法を示すが、これはデバッグ情報を持ちwxWidgetsソースコードまでデバッグ追跡できる。説明を目的として動作確認(1)で作成したDesktop1プロジェクトにDebug64_wx31ターゲットを追加する。

プロジェクトの修正

Code::Blocksを起動してTestDriveワークスペース(C:\Users\user\MinGW\TestDrive\TestDrive.workspace)してDesktop1プロジェクトをアクティブにする、あるいは直接Desktop1プロジェクト(C:\Users\user\MinGW\TestDrive\Project1\Project1.cbp)を開く。[Project|Properties]の[Project/targets options]ダイアログ[Build targets]ページの[Build targets]のリストボックスでDebug64を選び[Duplicate]ボタンを押す。[Duplicate build target]ダイアログのテキストボックスにDebug64_wx31を入力して[OK]で閉じる。リストボックスでDebug64_wx31が選択されている事を確認して[Build options]を押す。[Project build options]ダイアログが開き、左側ツリービューでDebug64_wx31が選択されている事を確認する。

[Linker settings]ページの[Link libraries]リストボックスでwxWidgets利用のライブラリファイルを置き換える。Desktop1プロジェクトは他のライブラリを利用していないので[Clear]で全消去し、[Add]で開く[Add library]ダイアログで追加する。ライブラリファイルはビルドオプションで異なるが、ここではモノリシック、ダイナミックリンクを選択する。

ライブラリ
libwx_mswu-3.1.dll.a

[Search directories]ページの[Compiler]ページ、[Linker]ページ、[Resource compiler]ページ各リストボックスの探索パスを以下に変更する。setup.hへの探索パス名(...\msw-unicode-3.1)もビルドオプションで異なる場合がある。

ページ 探索パス
[Compiler] C:\wxWidgets\wxWidgets-3.1.4\my_builds\debug64_monodll\lib\wx\include\msw-unicode-3.1
C:\wxWidgets\wxWidgets-3.1.4\include
[Linker] C:\wxWidgets\wxWidgets-3.1.4\my_builds\debug64_monodll\lib
[Resource compiler] C:\wxWidgets\wxWidgets-3.1.4\my_builds\debug64_monodll\lib\wx\include\msw-unicode-3.1
C:\wxWidgets\wxWidgets-3.1.4\include

[OK]で[Project build options]ダイアログを閉じる。[OK]で[Project/targets options]ダイアログを閉じる。

覚え書き
ビルドしたwxWidgetsのディレクトリを[Settings|Global variables]の[Global Variable Editor]ダイアログでグローバル変数に代入して利用するのは良い考えだが、MSYS2導入との共存に配慮を必要とする。Code::BlocksでビルドできるwxWidgets利用プロジェクトで一般に流通しているもの(例えばCode::Blocksソースコードそれ自身)の多くはwxWidgetsディレクトリがグローバル変数wxなどに代入されている事を想定する。従ってMSYS2導入とビルドwxWidgets(もしかしたら複数バージョン)を安全に共存させるにはグローバル変数セット切り替えなどのテクニックが必要となるが、ターゲットでセットを変更する手段がなく結構悩ましい。

[Build|Build]でDebug64_wx31ターゲットをビルドする。

実行とデバッグ追跡

[Build|Select target|Debug64_wx31]でDebug64_wx31ターゲットを選択する。wxWidgetsがダイナミックリンクでビルドされている場合はDLLに実行パスを通す必要があるが、Code::Blocksでの実行はPATHにライブラリディレクトリを自動追加するので省略できる。[Build|Run]で実行する。起動したプログラムの[Help|About](日本語化済みなら恐らく[ヘルプ|このアプリケーションについて])でビルドしたwxWidgetsバージョンを確認する(MSYS2導入と同バージョンだと区別はつかないが)。

debug64_monodllビルドはwxWidgets内部までデバッグ追跡できる。例えばDesktop1でwxWidgetsライブラリwxMessageBox関数の内部フローを確認する。

Desktop1Frame.cppのDesktop1Frame::OnAbout関数wxMessageBoxコール行にテキストカーソルを置いて[Debug|Toggle breakpoint]でブレークポイントを設定する。[Debug|Start / Continue]でデバッガをスタートしてDesktop1を実行させる。起動プログラムで[Help|About](あるいは[ヘルプ|このアプリケーションについて])するとブレークポイントで停止する。[Debug|Step into]するとwxMessageBoxではなくwxStringコンストラクタへ追跡するが、これは実引数処理してから関数コールするためである。[Debug|Step out]でブレークポイントへ戻る。さらに2回[Debug|Step into]と[Debug|Step out]でwxStringコンストラクタを追跡した後、4回目の[Debug|Step into]は_マクロが展開するwxGetTranslationへ追跡するのでもう1回[Debug|Step out]する。5回目の[Debug|Step into]でようやくwxMessageBoxへ追跡し、[Debug|Next line]の繰り返しで内部フローをステップ確認できる。[Debug|Start / Continue]で通常実行を再開する。

覚え書き
C++では追跡が直感と異なる場合がある。本例でもDesktop1Frame::OnAboutでwxMessageBoxリターン後に[Debug|Next line]を繰り返すとwxGetTranslationのwxString仮引数定義行やブレークポイントより前のwxStringローカル変数定義行へ追跡するが、これらはwxStringデストラクタのコールである。