まったく対処の方法が思いつかない例外が発生したんですが。
settimerで回してるソフトです。
常連のみなさんからみてどんなことが考えられるのでしょうか?
デバックでとんでみると見たことの無いコードに飛ばされています。
その前で(自分の書いたコード)で問題がおきているのは分かりますが、
どうやって探っていいかわかりません。
こういう場合の対処の仕方を教えて頂けると有難いです。
例外の発生の仕方は10〜15分後ぐらいにおこっているみたいです。
どうかご支援お願いします。
ソースコードの断片もエラーメッセージもまったく何も無い状態では
どうアドバイスしてよいかまったく対処の方法が思いつかないんだけど
地道にデバッグすればいいとおもう。
10分で再現するんだったら簡単だね。
どーせスタック破壊だろ
自動変数配列を確保数より多く書き換えるとスタックが破壊されて
関数からの戻りアドレス部分もぶっこわれるから見たこと無いコードに飛ぶ
とか書いたけど、先入観を持ってデバッグすると原因追及が遅れるので
虚心坦懐にコードを見るほうがいいだろね
>どーせスタック破壊だろ
>自動変数配列を確保数より多く書き換えるとスタックが破壊されて
おそらくそうかもしれませんね。
スタックオーバーフローとは違うのですか?
あと、他の常連さんの'可能性'でなにか
こうじゃないかという意見があれば随時募集です。
俺的にはスタックオーバーフローはスタック破壊とは違う
多分ほとんどの人も違うに同意してくれると思う
再帰関数のミスとかでスタック領域を使い切ってしまうのがオーバーフロー
使い切らなくてもスタック破壊は生じる
あー最近はやりの言葉を使えば
バッファオーバーフローによる脆弱性(セキュリティホール)
と言い換えることも可能だな
スタックオーバーフローとバッファオーバーフローは違うよん
閑話休題
可能性なんざ1分あれば5個くらい思いつくよ
それを考えるのがデバッグの仕事なんぢゃないの?
ネットの向こうの人に仕事を代行してもらおうとか甘い考えでいるの?
>ネットの向こうの人に仕事を代行してもらおうとか甘い考えでいるの?
分からないことを聞くのが質問掲示板だと思うんで。
うん。訊くのはかまわないと思うんだ。
でも情報不足な質問に対して妄想や憶測で返事するのは、答えるほうとしてはイヤなんだ。
まっとうな技術者は妄想や憶測で抱いた先入観を元に仕事しないもん。
だから先入観なしに虚心坦懐にコードみろって書いたんだけどな。
有用な答えが欲しかったら、回答者が妄想や憶測をはりめぐらせなくていいような
きっちり状況を解説できるだけの適切な質問をすべし。
そのために整理している間に答え(原因)が見つかることが良くあるんだがな。
デバックで見れるんだよね?なら関数の呼び出し履歴を見ればメモリを壊した直接の関数(コード)か、その1つ2つ前の関数が分かるはず。分からなくてもヒントになるようなものが隠れてるはずだ。
場合によっては全く分からない(ように見える)場合もあるけど、仕方なく全ソースを見直して原因が分かった後に、実は最初のデバッグ画面にヒントが出ていたことに気づくことも多いよ。
大事なのはすぐに解決しないからといって投げ出してしまい、デバッグ画面からヒントを読み取る努力を放棄しないこと。
補足だけど、もちろん全くヒントが無い場合もあるよ。その場合は上に書いたように全ソースを見直すしか方法はない(何日掛かっても)。ただ経験上そういう場合はほとんどないね(ただしマルチスレッドは別)。
またヒントが無い場合は、例えば一部の処理を無効にしてエラーが出なければそこは白なんで、それを繰り返して黒の部分を探す手もある。
どちらにせよデバッグで再現できる間はまだ簡単な方なんで、がんばってみてくれ。難しいのはDebugではエラーが出ないのに、Releaseだとエラーが出るとか、そういう場合の方だから。
使ってるVCのバージョンとかそういった情報もないからなぁ
デバッグで起動して、10〜15分間F10キーを叩き続けるとか
TRACEをソースのそこらかしこに貼り付けて、どこまでTRACE表示されるか
途中経過をファイルに吐き出しつづけるとか
そのあたり。
ツイート | ![]() |