スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【C#】エラー処理

先日のニコニコ動画の仕様変更の影響で、ニコニコランキングメーカーのマイリスト説明文追加機能が使用できなくなっていた。

という事で、例によってソースコードを解析してみた。


過去記事の「【動画作成】人のアプリの修正」と同じ手順で、怪しい関数を見つけて修正するわけです。


C#は使った事無いにもかかわらず、普段使ってるC言語と微々たるC++の知識、あとC#ソースコード上の関数名から大体の動きが読めるのが素敵。
少しは成長してるなぁと思う今日この頃。


んで、今回の箇所はこんな感じ。

nicoran_debug001

マイリストの編集画面のHTMLパーサ部分のコードで、
ニコニコ動画の仕様変更でパースエラーが起きているだけの模様。

"<tr id=\"の誤検出で2回多くループを回って、
While内の各検索が良く分からない物を探し出してきて
最終的にIndexOf関数に-1突っ込んでException飛ばしてるらしい。

気になったのは、While内のいくつかのIndexOfで、
-1が返って来たにも関わらず"watch/".Length とか足しこんでるので
途中検索に失敗してもまた先頭付近から検索して一見正常に処理される。
多分その後偶然Whileの条件で抜けてしまったらdicには変な値が入ってるかもしれない。


結構これ無いと不便なので、
適当に直して見たけれども、レベルダウンしてる気がしてならない。

って言うのも勝手に継続処理用のコード突っ込んだからなんだけど。
nicoran_debug002
IndexOfの戻りをその場で判定して異常値(-1)だったらdicの追加止めて継続するようにしてみた。
本来であればパースエラーでExceptionになってたのが、そのまま継続してしまうので問題が出そうな気がする。

でも、これだと微々たるHTMLの形式仕様変更だったら読み込めたとこまでのデータは返却出来るのでマシになるかも分からん。

上位の実装次第だけど、よく読まないと分からないので多分宜しくない事になりそう。
とりあえず今は動いてるから良いか。


公式BBSにも報告して来たから本家で修正されるだろう。


====

C#って凄いC++とVB足して割った感じだね。
C#が便利と言われる所以が分かった気がする。

関係ないけどVC#EEってメモリウインドウ無いんですか・・・
あと、ウォッチでStringの途中から先を表示する方法ってないのかな。

Cで言うと
char str[] = "abcde"
で、
str → "abcde"
str[0] → 'a'
str[1] → 'b'
&str[2] → "cde" ※これがやりたい

まぁ、多分なんか方法あるんだろうな。
スポンサーサイト

コメントの投稿

非公開コメント

色々
RSSリンクの表示
リンク
QRコード
QRコード
メールフォーム

名前:
メール:
件名:
本文:

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。