-
Notifications
You must be signed in to change notification settings - Fork 165
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MinGW の Debug で CNativeW.Clear のテストに失敗する #782
Comments
ぶっちゃけ、コイツのせいです。 sakura/sakura_core/mem/CNativeW.h Lines 192 to 196 in f41567f
というコメントをしたら @kobake さんは怒るでしょうか・・・ 😄 テストが通らなかった原因は とはいえ、こういうメンバ変数が必要だった事情はよく分かります。 visual studio を使ってデバッグする場合、メンバ変数の情報は自動的に解析されて適切なデータ型でデバッグ変数ウインドウ(ローカルとか自動変数とか)に表示されます。CNativeWはCMemoryを継承するクラスですが、CMemoryのデータバッファは デバッグを便利にする方法も進化しています。 最新の visual studio には、参照変数を用意しなくても 問題解決&再発防止の方策として、 |
↑ はなぜコンパイルオプションが混ざるとダメかという理由であって なので別の問題です。 |
コンパイルオプションの修正を PR にしました> #783 ツールや環境の進化に合わせた必要性の再考や、よりよい代替手段の模索はあっていいと思いますが、手法の禁止ありきの縛りプレイには参加できません。現在の基準で過去の選択を批判するのもアンフェアだと思います。 |
調べて結果をまだ書いていませんでした。 @berryzplus さんが #782 (comment) で引用したのはヘッダファイルです。テストプログラムのコンパイル時に(デバッグビルドであっても) _DEBUG が未定義の状態で評価されたため、メンバ変数 m_pDebugData が定義されませんでした。 しかしそこから呼び出される CNativeW のコンストラクタはエディタの一部として(正しく) _DEBUG が定義された状態でコンパイルされたものなので、m_pDebugData が存在するものとして値を初期化しようとします。 その結果テストプログラムのスタック上で CNativeW と近接する変数の値が破壊されてしまいました。 |
対応方法はいろいろ考えられたと思うんですが、
|
これはまったくその通りです。 しかし CMake 対応の行き着く先が望むべきものか、やや疑問があります。つまり、CMake は Visual Studio のソリューションファイルとプロジェクトファイルを作成しますけれど、そこには CMake を実行した環境と結びついたフルパスが埋め込まれます。生成されたファイルはポータブルではなくあくまでも中間生成物としての寿命しか想定されません。自分はもはや Visual Studio にはこだわりませんが、他の皆さんは Visual Studio を起動する前に CMake を実行することをどう考えるだろうか、と。 CMake (CMakeLists.txt) を通してプロジェクトのソースファイルをフォルダでグループ分けする方法もわかりませんでした。CMake で生成したプロジェクトを Visual Studio で開くとすべてのソースファイルがフラットに並びます。FOLDER ターゲットプロパティがそれっぽいのですが確証はありません。 |
ポイントとして把握しておきたいのはCMakeとvs2017の連携方法は2つある、ということです。 Visual StudioはCMakeLists.txtを直接開けます。(起動してからファイル⇒開く⇒CMake。) 「CMakeLists.txtを開く(≒Ninjaを使う)」のメリットは、PCの実装コア数に比例してビルドが速くなることと設定だけでMinGW-w64ビルドにも対応できることです。当面「visual studioの前にCMake」への移行は考えていませんが、Ninjaを使う方式との共存は検討する価値があると思っています。
visual studio で CMake を開くと、 CMakelists.txt があるフォルダ配下の物理フォルダ階層がそのままソリューションビューに表示されます。 |
Visual Studio で直接開けるんですね! では CMakeLists.txt で一元管理する方向でしょうか。期待します。 |
バグ内容
MinGW の Debug で CNativeW.Clear のテストに失敗する
https://ci.appveyor.com/project/sakuraeditor/sakura/builds/22084234/job/l5hd5e6yvtkp2nak/tests
再現手順
MinGW の Debug構成で単体テストをビルドして CNativeW.Clear を実行する。
関連 PR
#776 (comment)
#776 で発見されましたが、#776 なしでも発生します。
再現頻度
100%
メモ
#781 の問題のためにテストに失敗しても appveyor は失敗しません。
The text was updated successfully, but these errors were encountered: