C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[18]: VB.netでアプリケーションエラーを発生させる


(過去ログ 32 を表示中)

[トピック内 25 記事 (1 - 20 表示)]  << 0 | 1 >>

■15345 / inTopicNo.1)  VB.netでアプリケーションエラーを発生させる
  
□投稿者/ ヨシ (1回)-(2008/03/11(Tue) 17:13:09)

分類:[VB.NET/VB2005] 

VB.netでアプリケーションエラーを発生させるテストプログラムを作成したいと思っています。
アプリケーションエラーの内容はメモリの参照エラーです。
エラーをわざと起こすプログラムを作るというのが、難しく苦戦しています。
何か良い方法など御座いましたら、教えて頂けないでしょうか?
よろしくお願い致します。
引用返信 編集キー/
■15346 / inTopicNo.2)  Re[1]: VB.netでアプリケーションエラーを発生させる
□投稿者/ (報告) (2回)-(2008/03/11(Tue) 17:50:07)
No15345 (ヨシ さん) に返信
http://vbnet-iku2.hp.infoseek.co.jp/cgi-bin/treecrsdx01/index.cgi?m=look&bnum=3882
引用返信 編集キー/
■15347 / inTopicNo.3)  Re[1]: VB.netでアプリケーションエラーを発生させる
□投稿者/ Mr.T (203回)-(2008/03/11(Tue) 17:53:01)
Mr.Tです、こんにちは。

No15345 (ヨシ さん) に返信
> VB.netでアプリケーションエラーを発生させるテストプログラムを作成したいと思っています。
> アプリケーションエラーの内容はメモリの参照エラーです。
> エラーをわざと起こすプログラムを作るというのが、難しく苦戦しています。
> 何か良い方法など御座いましたら、教えて頂けないでしょうか?
> よろしくお願い致します。

ん...
例外を投げてやるのじゃだめなんでしょうか?
throw new OutOfMemoryException()

引用返信 編集キー/
■15348 / inTopicNo.4)  Re[2]: VB.netでアプリケーションエラーを発生させる
□投稿者/ ヨシ (3回)-(2008/03/11(Tue) 18:01:39)
No15346 ((報告) さん) に返信
> ■No15345 (ヨシ さん) に返信
> http://vbnet-iku2.hp.infoseek.co.jp/cgi-bin/treecrsdx01/index.cgi?m=look&bnum=3882

Mr.T様 早速のご回答ありがとうございます。

もう少し詳しく書かせて頂きますと、
アプリケーションエラー(メモリ参照エラー)のダイアログを画面に表示するようにしたいです。
プログラム初心者の為、このような形の質問で、申し訳ありません。

引用返信 編集キー/
■15349 / inTopicNo.5)  Re[1]: VB.netでアプリケーションエラーを発生させる
□投稿者/ やじゅ (233回)-(2008/03/11(Tue) 18:16:32)
No15345 (ヨシ さん) に返信
> エラーをわざと起こすプログラムを作るというのが、難しく苦戦しています。
> 何か良い方法など御座いましたら、教えて頂けないでしょうか?

ツールがあるようですが、メモリ参照がなかったかも(^^;

例外を思いのままに発生できる「DevPartner Fault Simulator」レビュー
http://www.atmarkit.co.jp/fdotnet/tools/faultsimulator/faultsimulator_01.html
引用返信 編集キー/
■15350 / inTopicNo.6)  Re[3]: VB.netでアプリケーションエラーを発生させる
□投稿者/ Mr.T (204回)-(2008/03/11(Tue) 18:32:02)
No15348 (ヨシ さん) に返信
> ■No15346 ((報告) さん) に返信
>>■No15345 (ヨシ さん) に返信
>>http://vbnet-iku2.hp.infoseek.co.jp/cgi-bin/treecrsdx01/index.cgi?m=look&bnum=3882
> 
> Mr.T様 早速のご回答ありがとうございます。
> 
> もう少し詳しく書かせて頂きますと、
> アプリケーションエラー(メモリ参照エラー)のダイアログを画面に表示するようにしたいです。
> プログラム初心者の為、このような形の質問で、申し訳ありません。

うーん、何が最終目的なのか全然わかりませんが、
アプリケーションエラーのダイアログも出ます。

	Public Sub Main()
		Throw New OutOfMemoryException()
	End Sub

んでも、これって何をどうするわけでもないプログラムだし...
#おまけに、これってメモリ参照エラーじゃなくて、メモリが足りませんってやつだな(^^;

AccessViolationExceptionが正解なのかな>メモリ参照エラーっていえば


引用返信 編集キー/
■15351 / inTopicNo.7)  Re[4]: VB.netでアプリケーションエラーを発生させる
□投稿者/ 渋木宏明(ひどり) (670回)-(2008/03/11(Tue) 18:44:48)
渋木宏明(ひどり) さんの Web サイト
適当なアドレスに対して Marshl.Copy() してやればいいんじゃないかと>メモリ参照エラー
引用返信 編集キー/
■15352 / inTopicNo.8)  Re[5]: VB.netでアプリケーションエラーを発生させる
□投稿者/ ヨシ (5回)-(2008/03/11(Tue) 18:58:05)
No15351 (渋木宏明(ひどり) さん) に返信
> 適当なアドレスに対して Marshl.Copy() してやればいいんじゃないかと>メモリ参照エラー

分かりづらくて大変申し訳ありません。

アプリケーション ポップアップ: XXXX.EXE - アプリケーション エラー :
"0x5007746e" の命令が "0x00175000" のメモリを参照しました。メモリが "read" になることはできませんでした。
プログラムを終了するには [OK] をクリックしてください プログラムをデバッグするには [キャンセル] をクリックしてください

という内容のメッセージボックスを画面上に表示したいです。


引用返信 編集キー/
■15353 / inTopicNo.9)  Re[6]: VB.netでアプリケーションエラーを発生させる
□投稿者/ 渋木宏明(ひどり) (671回)-(2008/03/11(Tue) 19:09:03)
渋木宏明(ひどり) さんの Web サイト
> アプリケーション ポップアップ: XXXX.EXE - アプリケーション エラー :
> "0x5007746e" の命令が "0x00175000" のメモリを参照しました。メモリが "read" になることはできませんでした。
> プログラムを終了するには [OK] をクリックしてください プログラムをデバッグするには [キャンセル] をクリックしてください
>
> という内容のメッセージボックスを画面上に表示したいです。

Marshal.Copy() でできると思うんですが。
出来ませんでしたか?
引用返信 編集キー/
■15355 / inTopicNo.10)  Re[6]: VB.netでアプリケーションエラーを発生させる
□投稿者/ はつね (503回)-(2008/03/11(Tue) 19:35:43)
No15352 (ヨシ さん) に返信
> アプリケーション ポップアップ: XXXX.EXE - アプリケーション エラー :

もしかしたらコードを書き変えずに外から目的のプログラムに対してそのエラーをおこさせたいとかですか?

それとも、皆さんが書かれているように自分でエラーを発生させてアプリケーションエラーのメッセージボックスを表示させたいのですか?

引用返信 編集キー/
■15356 / inTopicNo.11)  Re[7]: VB.netでアプリケーションエラーを発生させる
□投稿者/ じゃんぬねっと (541回)-(2008/03/11(Tue) 20:35:23)
なんてこったい。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=43894&forum=7&start=13
引用返信 編集キー/
■15362 / inTopicNo.12)  Re[8]: VB.netでアプリケーションエラーを発生させる
□投稿者/ tyappi (2回)-(2008/03/11(Tue) 22:21:12)
tyappi さんの Web サイト
C++ で適当に作ってみたら簡単にお望みのものができるんじゃないんですかね。

基礎を抑えずに適当に作ったら間違いなくその手の例外発生させることができると思う。
引用返信 編集キー/
■15363 / inTopicNo.13)  Re[9]: VB.netでアプリケーションエラーを発生させる
□投稿者/ ヨシ (7回)-(2008/03/11(Tue) 22:30:28)
No15362 (tyappi さん) に返信
> C++ で適当に作ってみたら簡単にお望みのものができるんじゃないんですかね。
>
> 基礎を抑えずに適当に作ったら間違いなくその手の例外発生させることができると思う。

今回はVB.netで作るよう指示がありまして・・・

>>渋木宏明(ひどり)様
Marshal.Copy() では実現できませんでした。

>>はつね様
自分でエラーを発生させてアプリケーションエラーのメッセージボックスを表示させたいです。



引用返信 編集キー/
■15366 / inTopicNo.14)  Re[10]: VB.netでアプリケーションエラーを発生させる
□投稿者/ 片桐 (79回)-(2008/03/11(Tue) 23:41:23)
片桐 さんの Web サイト
C++で受け渡しに構造体を使用した適当な関数(中身は何でもいい)を作ってDLLにしておいて、
VBからその構造体と異なるサイズの変数をパラメータにして、作っておいたDLL内の関数をCALLすれば起こせますね。

VBだけではなかなか実現が難しいと思います
引用返信 編集キー/
■15367 / inTopicNo.15)  Re[10]: VB.netでアプリケーションエラーを発生させる
□投稿者/ 渋木宏明(ひどり) (672回)-(2008/03/11(Tue) 23:50:56)
渋木宏明(ひどり) さんの Web サイト
> Marshal.Copy() では実現できませんでした。

アドレスが若いから、相当ちっさいプログラムじゃないとダメみたいですね。

VB じゃ (C# でも?) 無理かもね。


引用返信 編集キー/
■15368 / inTopicNo.16)  Re[11]: VB.netでアプリケーションエラーを発生させる
□投稿者/ ヨシ (8回)-(2008/03/12(Wed) 00:06:43)
No15366 (片桐 さん) に返信
> C++で受け渡しに構造体を使用した適当な関数(中身は何でもいい)を作ってDLLにしておいて、
> VBからその構造体と異なるサイズの変数をパラメータにして、作っておいたDLL内の関数をCALLすれば起こせますね。
>
> VBだけではなかなか実現が難しいと思います

C++という部分は例えばC#とかでも構わないのでしょうか?
それから、VBだけで実現というのはやはり厳しいということですか?
C++と言われましても、VB以上に知識がないもので・・・
引用返信 編集キー/
■15369 / inTopicNo.17)  Re[12]: VB.netでアプリケーションエラーを発生させる
□投稿者/ Azulean (26回)-(2008/03/12(Wed) 00:41:26)
> C++という部分は例えばC#とかでも構わないのでしょうか?
> それから、VBだけで実現というのはやはり厳しいということですか?
> C++と言われましても、VB以上に知識がないもので・・・
C#やVB等ではCLRあたりでハンドルされていると思うので、あのダイアログは出ません。
出るとすれば、「AccessViolationException はハンドルされませんでした。 保護されているメモリに読み取りまたは書き込み操作を行おうとしました」あたりではないですかね。
(参考:C#からC++で書いたCOMを呼び出し、COMのコードでメモリアクセス違反を出しても、.NET Frameworkおなじみのダイアログが出ます)

よって、アンマネージアプリケーションでやるしか手だてはないかと。
引用返信 編集キー/
■15370 / inTopicNo.18)  Re[12]: VB.netでアプリケーションエラーを発生させる
□投稿者/ 片桐 (80回)-(2008/03/12(Wed) 00:44:50)
片桐 さんの Web サイト
C#では難しいかもしれません。
ものすごく乱暴で大雑把な話になりますけど、
結局、VB+.NetFrameworkの世界ではメモリのアクセス違反や例外がおきない様に内部でうまく処理してくれるので、
普通に?プログラミングしている分には起きることがほとんどありません。

なので発生させるにはそれらから離れた世界とVBとをやり取りさせることが手っ取り早いんです。

ですから擬似的に起こすのであれば、Throw Exception を、
実際に再現させるなら、上記のとおりです。


引用返信 編集キー/
■15371 / inTopicNo.19)  Re[13]: VB.netでアプリケーションエラーを発生させる
□投稿者/ 渋木宏明(ひどり) (673回)-(2008/03/12(Wed) 01:19:53)
渋木宏明(ひどり) さんの Web サイト
> よって、アンマネージアプリケーションでやるしか手だてはないかと。

ASP.NET や ClickOnce のようなセキュリティ制限下でなければ、Marshal.XXX や unsafe でアンマネージメモリに対してアクセスすることは可能です。

が、例示されたアドレス 0x0175000 はかなりアドレスが若いので、.NET ではごく小規模なアプリケーションでもメモリがマップされていて、読み取りエラーを起こすのは困難なようです。

引用返信 編集キー/
■15372 / inTopicNo.20)  Re[14]: VB.netでアプリケーションエラーを発生させる
 
□投稿者/ Azulean (27回)-(2008/03/12(Wed) 01:36:01)
2008/03/12(Wed) 01:37:59 編集(投稿者)

> が、例示されたアドレス 0x0175000 はかなりアドレスが若いので、.NET ではごく小規模なアプリケーションでもメモリがマップされていて、読み取りエラーを起こすのは困難なようです。
先の発言は、例示されたアドレスやアンマネージコード・マネージコード関係なしに、メモリアクセス保護違反は.NET FrameworkのAccessViolationに変換されるのではないかという意図です。
細かい原理等まで追ったわけではないので、私の目に見えてない要素が働いているかもしれませんが…。
(もちろん、完全なフォローがされるわけではないとみられるので、起こす術はあるかもしれません)

パターン1:Marshal.Copy
※IntPtr.ZeroでArgumentNullExceptionを投げるので1にする。
byte[] buffer = new byte[100];
Marshal.Copy(buffer, 0, new IntPtr(1), 100);

System.AccessViolationException: 保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。
場所 System.Runtime.InteropServices.Marshal.CopyToNative(Object source, Int32 startIndex, IntPtr destination, Int32 length)
場所 WindowsApplication1.Form1.Form1_Load(Object sender, EventArgs e)

パターン2:CopyMemory
[DllImport("kernel32.dll")]
private static extern void CopyMemory(IntPtr destination, IntPtr source, int size);
private void Form1_Load(object sender, EventArgs e)
{
IntPtr test = Marshal.AllocHGlobal(100);
CopyMemory(IntPtr.Zero, test, 100);
Marshal.FreeHGlobal(test);
}

System.AccessViolationException: 保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。
場所 WindowsApplication1.Form1.CopyMemory(IntPtr destination, IntPtr source, Int32 size)
場所 WindowsApplication1.Form1.Form1_Load(Object sender, EventArgs e)


.NET Frameworkの例外ダイアログ(継続 or 終了)が出てしまうので、質問者が意図しているダイアログにはたどり着かないのではないかと考えています。
引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -