提案;不正なスキンがあっても起動できるようにする
<Coefficient>を試している時に気づいたのですが、閉じタグが無いなど、「登録されているPyディレクトリに不正なXMLのスキンが一つでも存在する」とXEditorはエラーダイアログなど一切無しで起動できなくなるようです。
不正なスキンは暗黙的にスルーするとか、try文的な構造にすることはパフォーマンス的に厳しいでしょうか?
Comments (7)
-
repo owner -
reporter 32bit版でも起動は出来ないのですが、確かに無言落ちはせず、オブジェクトエラーが出るようです。
ただ、タスクマネージャーに実行中のまま残る(64bit版は残らない)のでこちらの方が後始末は大変かもしれません。
自分の環境ではJUDGMENTのSkin.xml114行目(1.8だと24行目)の愚者の</Ability>を消した場合で再現しています。
object.Error object.Error@(0): Access Violation
0x014602A8
0x00938F82
0x00939133
0x0146025C
0x00938F82
0x00939133
0x0146025C
0x0143ABC4
0x00938F4E
0x00938F82
0x00938E3F
0x0146025C
0x0143ABC4
0x00938C5A
0x00938C8E
0x014559D6
0x009364BD
0x01031EF1
0x010255CF
0x01022C7C
0x004ADC49
0x004AD51C
0x00FA8271
0x00619168
0x01449BDB
0x01449B55
0x014499F0
0x00619278
0x01616B1D
0x778E6359 in BaseThreadInitThunk
0x77E87A94 in RtlGetAppContainerNamedObjectPath
0x77E87A64 in RtlGetAppContainerNamedObjectPathcwxeditor_error.log
2019-08-16 00:20:06 [Build: 2019-08-15 16:55:36 Debug (32-bit)] cwx\editor\gui\dwt\cwxeditor.d:111 46 - 48 - 52 - 54 - 56 - 58 - 60 - 102
2019-08-16 00:20:06 [Build: 2019-08-15 16:55:36 Debug (32-bit)] cwx\editor\gui\dwt\cwxeditor.d:112 [Access Violation] , 0:(内容は上記と同じ?)
-
repo owner pull request #565
ありがとうございます。アクセス違反をキャッチできるようにしました。
-
reporter 32bit版では起動できるようになってました。対処ありがとうございます。
除外された場合の扱いはどうなるのかと思ってシナリオのスキン選択のチョイスボックスをみたところ、空白で「()」と表示されており、選択できましたが、軽く見た限りでは特に問題はなさそうでした。(xmlが読めないだけで素材は認識+スキンが無い状態と同じ?)
-
repo owner pull request #566
おっと、リストに出現するのはバグです。
どうもちゃんと対応できているというのは錯覚だったようです。
-
repo owner たぶん解決していると思います。
-
reporter - changed status to resolved
こちらの方でも上記のケース、64bit版で正常に立ち上がるのを確認しました。 8.0は軽くなったような気がしていましたが、XMLを取り使うライブラリを変えたということだったんですね。10倍はすごい…
- Log in to comment
ご報告・ご提案ありがとうございます。
手許で試してみたのですが、特に起動できなくなる事は無く、壊れたスキンは正常に除外されました。
となると考えられる事は、XMLのパースを行うライブラリのコードにXMLのパース中にアクセス違反が発生するバグがあり、現在の64-bitビルド版のランタイムではアクセス違反を検知できずに黙って落ちるという問題と複合して仰られるような問題が起きているという事です。
この推測が正しければ、32-bit版なら正常に動くはずです。
放置するのはよくない問題なのですが、問題がライブラリと処理系にあるのであればcwxeditorのコードではどうにもできません。
Dの
std.xml
は将来的に置換される予定になっているので(随分長くかかっていますが)、それが実行された時に副次的に解決できるかもしれません。ついでにエンジン側で起動できなくなるケースを見つけたのでそちらは目に見える形でエラーを出すように修正しておきます。