- PR -

例外スタックトレース

1
投稿者投稿内容
honographics
会議室デビュー日: 2005/09/15
投稿数: 3
投稿日時: 2005-09-15 09:15
お世話になっております。

ASP.NET(VB/WIN2003server)で下記エラーが発生し
原因がわからずに困っています。

Btn_Update_Clickイベントで文字列が数値に変換できずにエラーになっているまでは
わかるのですが、数値変換はConvert.ToInt16をつかっており
仮にConvert.ToInt16で変換できない場合は
「System.Convert.ToInt16(String value)」
がトレースに表示されるはずですが、表示されていません。
Parseも直接使っていません。

ちなみにスタックトレースの 「+0」や「+37」はどういう意味があるのでしょうか?

ご教授よろしくお願いします。

--------------------------------------------------------------------------------

入力文字列の形式が正しくありません。
説明 : 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

例外の詳細: System.FormatException: 入力文字列の形式が正しくありません。

ソース エラー:

現在の Web 要求の実行中にハンドルされていない例外が生成されました。障害の原因および発生場所に関する情報については、下の例外スタック トレースを使って確認できます。

スタック トレース:

[FormatException: 入力文字列の形式が正しくありません。]
System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) +0
System.Int16.Parse(String s, NumberStyles style, IFormatProvider provider) +37
XXX.XXX_main.Btn_Update_Click(Object sender, EventArgs e) +9681
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain() +1258

--------------------------------------------------------------------------------
バージョン情報 : Microsoft .NET Framework バージョン :1.1.4322.573; ASP.NET Version:1.1.4322.573
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2005-09-15 10:23
こんにちわ。

Debug モードでやってないからじゃないでしょうか?
Release モードでやると、最適化してるのか、正確に出てないですね。

+37 ・・・。何でしょうね。ソースが見えるところは行番号のようですが。
honographics
会議室デビュー日: 2005/09/15
投稿数: 3
投稿日時: 2005-09-15 14:11
ご回答ありがとうございます。
Release モードで当メッセージがでています。
画面から同じ値を入力して正常終了する場合と
当エラーが発生する場合があり
余計に分からなくなっています。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-15 14:30
こんにちは、じゃんぬ です。

引用:

honographicsさんの書き込み (2005-09-15 09:15) より:

例外の詳細: System.FormatException: 入力文字列の形式が正しくありません。


原因を絞りこむためにも、どの値を Parse しようとしたかを調べていませんか?
怪しいところで、値を確認するために何かを出力したりとかしていませんか?
デバッグを始めるのに 1 番最初にやる作業だと思います。

引用:

Parseも直接使っていません。


直接使ってなくても内部的に使ってるメソッドはありますからね。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2005-09-15 15:10
引用:

Release モードで当メッセージがでています。


Release でデバッグしているのですか?

引用:

画面から同じ値を入力して正常終了する場合と
当エラーが発生する場合があり
余計に分からなくなっています。



問題のコード周辺を出して頂くと分かる「かも」しれません。
honographics
会議室デビュー日: 2005/09/15
投稿数: 3
投稿日時: 2005-09-15 20:01
実は他の人からの指摘で発覚したエラーで
自分では当エラーが再現できていない状況です
(どのような条件でエラーが発生するか謎)

Parseを内部的に使っているConvert.ToInt16は全て調べました。
プログラムをいじってConvert.ToInt16に変換できない値を渡したりして
みましたが、その場合はトレースに
「System.Convert.ToInt16(String value)」が表示されることを確認しました。

Convert.ToInt16以外にParseを内部的に使っているメソッドは
使ってないと思うのですが・・・。

一応、convertを使っている3箇所を下記させて頂きます。
------------------------------------------------------------------
Dim W_Date As DateTime
Dim W_Keizyobi As DateTime
W_Date = Convert.ToDateTime(Txt_Keizyou_Tuki.Text & "/01")
W_Keizyobi = DC.Getmatu(Convert.ToInt16(Year(W_Date)), Convert.ToInt16(Month(W_Date)))
------------------------------------------------------------------
------------------------------------------------------------------
cmd.Parameters.Add("@更新回数", SqlDbType.Int)
cmd.Parameters("@更新回数").Value = Convert.ToInt16(Hdn_Upd_Cnt.Value) + 1
------------------------------------------------------------------
------------------------------------------------------------------
If Convert.ToInt16(cmd.Parameters("@Results").Value) = 999 Then
txtMessage.Value = "XXX"
Exit Sub
End If
------------------------------------------------------------------

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-15 20:15
こんにちは、じゃんぬ です。

引用:

honographicsさんの書き込み (2005-09-15 20:01) より:

実は他の人からの指摘で発覚したエラーで
自分では当エラーが再現できていない状況です
(どのような条件でエラーが発生するか謎)


と、とりあえず、聞かなきゃダメですよね?
再現するまで、粘らないと何とも進みませんよね?

絞り込める情報がこれ以上ないのであれば、
ちょっと回答しかねますね。> とりあえず私は。


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

スキルアップ/キャリアアップ(JOB@IT)