#気まぐれ & 気まま & 天邪鬼な老いぼれ技術屋の日々の記録のうち、パソコン技術やインターネット技術、プリンタやPCアプリからプログラム言語などに関連した記事です。
右端上端の同一カテゴリージャンプボタンで同じカテゴリーの他の記事を順番にご覧いただけます。
Access Counter:  総アクセス数

楽 天 の 商 品

-2047- 問題解決
= 今日は画像なし m(_ _)m =
と言うほど大げさなものではないが。
先週末、2つの技術的な問題にぶつかっていた。1つは Arduinoのプログラム。LCDに時刻を表示させるサブルーチンが暴走してしまった。Thinkercadでシュミレーションすると途中から如何なるブレークポイントにも引っかからずに、プログラムがどこを走っているか分からなくなった。全く同じ処理を Main関数(loop(){})中で実行しても問題ないのに、全く同じ文をカットしてサブルーチンに移動すると暴走する。
当初、Thinkercad独自の問題かと思ったが、いろいろ切り分けていって、最後は "sprintf"文の所で暴走していると何とか原因箇所を突き止めた。原因は何の事はない 文字列を宣言する char string[]で終端文字を考慮せず 2文字の文字列に string[2]としたために、サブルーチンで sprintfを実行するとメモリ上の他のデータを溢れた終端文字で書き換えてしまっていたようだ。ビギナーならではのミス!
もう一つは、全く違う問題。しばらく前(2ヶ月位前?)からこの e日記の書き込み用 Perlプログラムで、本文内に表示する画像ファイルのアップロードプログラムが働かなくなっていた。特にプログラムを変更したつもりはないが、画像ファイルをアップロードしても所定のフォルダーにその画像ファイルが書き込まれていない。仕方ないので別途 FFFTPで画像をアップロードして凌いでいた。昨日も同じように対処したが、思い切って該当のプログラムをエディタで開いて追いかけてみた。当然、読んだだけでは問題なさそうだったが、3箇所ほどチェック文を挿入してデバックしたら、何の事はないエスケープ文字の処理を怠っていた事に気づいた。 アップロードの際に指定したファイル名を「.」(ピリオド)で切って拡張子を求めるのに $FORM{'filename'}=~ /(.*).(.*)/) とやっていた。これではピリオドのつもりの真ん中の「.」が「全ての一文字」になってしまう。で、真ん中の「.」を 「\.」とエスケープして $FORM{'filename'}=~ /(.*)\.(.*)/) と変えたらOK。
なぜしばらく前まではエスケープしないでも問題なかったのかは??? 多分、Lolipopサーバーの Perlのバージョンがアップして解釈が厳しくなったのかな?
いずれにしてもプログラムバグは初歩的なところに潜むと言う教訓。
2019/02/25