wclrp ( 'o') さま、FUKU さま
じょうほうありがとうございます
/EHa、および、SetUnhandledExceptionFilter()は調べてみます
> そのため、処理を行う実行ファイルが、ハングアップした場合に、
> 終了させるプロセスと、起動していない場合に起動させるプロセスを持っています
これやっているといつかリソース不足でOS自身がハングアップする可能性があります。
いままで起きてないのが偶然だと思えるぐらいです。
> 処理できなくてアプリケーションが落ちてしまった場合、
> そのファイルは処理できなかったかはログに管理されています
う--ん、
なんか重要なことが出来てないような気がします。
>処理できなくてアプリケーションが落ちてしまった場合
処理できなかった場合、アプリケ-ションは落ちてしまうのでなく、
異常終了するのが正解です。
なので、VC8のように異常終了のウインドウが出るほうが正解です。
しかも、アプリケ-ション側で異常終了する前にエラーで正常終了させるべきです。
>># お客さんがここ見てたらどうしましょう?
>特に問題はありません
問題あります。
「処理的に間に合わなくてアプリケ-ションでエラーで省いている。」
と
「処理的に間に合わなくてアプリケ-ションがハングアップして落ちるもしくは
異常終了する。」
は大きな違いです。
> 出しているのはOSというべきでしょうか?
それを分かっていないとは気付かなかった。VC以外でも出るし。
私の↓の説明を見て勘違いも強まってしまったかな?
>・VC8では、異常終了をMSに通知する仕組みが採用されている。
プログラムが異常終了するときは、のんびりとダイアログなんて
出す余裕がないことが多いです。終了したプログラムについて、
正常終了時にされるはずの処理がされてないことに気付くのは
OSでしょう。
きっとこんな感じじゃまいか。
int main() {
// 私は死ぬ前に遺言を書きます ← VC6には無い宣言。
...
// 遺言を書く
return 0;
}
OS:書くって言ってたのに遺言が残ってない!
> >特に問題はありません
> 問題あります。
例えば
「その程度のリスクならうちは構わないので根本的な解決はしなくていいよ。」
と、お客さんが言っているのならば、このやり取りを見られても構わないのでは?
そのような事情を判断してえ~いちさんが問題ないと書いているのでしょう。
一般論としてならば、おっしゃる通りと思いますが。
#include <cstdio>
int main() {
fread((void*)0x8000, 0xffff, 0xffff, (FILE*)0x8000);
return 0;
}
VC++6+sp6, WinXP+sp3 環境で「エラー報告しますか?」ダイアログが出た。
スレの流れが「VC6 はダイアログが出ない」となっている気がしないでもなかったので一
応報告。
すみません。C++ 例外しかチェックしていませんでした。
VC6 で main() から throw; すると標準エラー出力には
abnormal program termination
が出ますが、ダイアログは出ませんでした。
VC8 ではダイアログが出ます。
> VC++6+sp6, WinXP+sp3 環境で「エラー報告しますか?」ダイアログが出た。
> スレの流れが「VC6 はダイアログが出ない」となっている気がしないでもなかったので一
> 応報告。
報告ありがとうございます。出ましたか。
昔は出なかったような気がするので、OSが変わったということですね。
という訳で、私の遺言の話は間違いのようです。
ダイアログが出るようになった原因は、シャノンさんが
「シャノン 2008/05/16(金) 12:26:21」で書いてあるとおりですね。
>>gak
スタックの破壊とかの場合、呼び出し階層の深さが浅ければ丁度mainからの
return扱いで正常終了するケースとかも有りうるような…
メモリ破壊の場合はただでさえどうなるか未知数の部分がありますし、ライブラリ
の違いで落ち方が変わるのも十分ありうるかなと思います。
>> >特に問題はありません
>> 問題あります。
>お客さんが言っているのならば
本質を理解してそれ言える客ってはたして居るんでしょうか?
メモリ回りだと所謂「任意のコードを実行されるセキュリティホール」の可能性も高
いわけですが…
……まぁ、見つかってない同種バグの可能性考えたら一緒ですね♪
VC8 の abort() がダイアログを出すようになったからっていうことは
ありませんかね?
そうだとすると _set_abort_behavior() で動作を変更できるようです。