ラベル debug の投稿を表示しています。 すべての投稿を表示
ラベル debug の投稿を表示しています。 すべての投稿を表示

2020年3月20日金曜日

Python 関数の引数チェック

ここでは、
aasertを使用して関数の引数をチェックしてみます!

プログラムが安定するまでは、コーディングにのこしておくといいものかな?
パイソンの起動パラメータで -Oで、無効にできますしね!


例)
def add(a, b):    
   assert isinstance(a, int) and isinstance(b, int), '引数を int型し!
   c = a + b

add(123, '10')



もちろん、こんなコーディングは、ほとんどないけど
関数からの値を渡す場合などは、このようなケースはあり得ます。


data1= 123
data2= funcA()
add( data1, data2)

なら結構やってしまうエラーかもしれません、
funcAにバグが無いとは誰もわかりません!
これを書いておくとヒューマンエラー的にもいいのかな?!





2018年12月15日土曜日

パイソンのデバッガー



音声はないですが、どうでしょうか?

http://simple-and-useful.net/

のサイトで、サックとコーディングしてデバッグです。


2018年10月17日水曜日

パイソンのデバッグ テクニック2


今回は、プログラムのどこを流れたかを確認する関数を作成しました。
プログラムの流れをトレースするのに便利な関数です


print文により、ソースファイル名、関数名、行番号が表示されます。
以下の変数に格納されます。

fileNm  ソースファイル名
funcNm  関数名
lineNo    行番号


表示フォーマットは、自分の好きなようにカスタマイズしてくださいね!
現在は、こんな感じです。

test.py main:15
test.py func:12




🔸トレースに便利な関数

def dbg():

  frame = inspect.currentframe().f_back

  fileNm = os.path.basename(frame.f_code.co_filename)
  funcNm = frame.f_code.co_name
  lineNo = frame.f_lineno

  print( fileNm, "%s:%s" %(funcNm, lineNo) )





🔸ソース全体  ( test.py )
こちらをコピペすれば動作が確認できると思います。


import inspect
import os

def dbg():
  frame = inspect.currentframe().f_back
  fileNm = os.path.basename(frame.f_code.co_filename)
  funcNm = frame.f_code.co_name
  lineNo = frame.f_lineno

  print( fileNm, "%s:%s" %(funcNm, lineNo) )

def func():
  dbg()

def main():
  dbg()
  func()


main()



以下のリンク先のNpdbですぐに確認しよう!
----------------------------------------------------------------------------------
誰でも簡単に使える、 クラウド パイソンデバッカー (IDE/編集可能)
 Npdb

リンク先は、  http://simple-and-useful.net/index-j.html
----------------------------------------------------------------------------------

2018年10月7日日曜日

パイソンのデバッグ テクニック1

ここでは、パイソンのデバッグテクニックとして
デバッグ関数を作成してみた。
以下がその関数である。



def mydbg( s ):

    print( s )

    fileName ="dbg.txt"
    with open( fileName, mode='w') as f:
        f.write(s)
    
    
    
mydbg("abcdefg")








ご存知だと思いますが、上記をモジュールにして
(モジュールにするには、上のソースをmydbg.pyのファイル名にして
カレントフォルダーに保存します)

インポートするには、簡単です
こんな感じでインポートすればOKですね。



#import mydbg
from mydbg import *

mydbg("douda-hyouji")



----------------------------------------------------------------------------------
誰でも簡単に使える、 クラウド パイソンデバッカー (IDE/編集可能)
 Npdb

リンク先は、  http://simple-and-useful.net/index-j.html
----------------------------------------------------------------------------------

2018年9月16日日曜日

python バージョン変換(2から3へ)

昨日は、npdb(デバッカー)のソースのバージョンをUPさせた。

※http://simple-and-useful.net/netpdb/npdb.html



いくつかの注意点をまとめました。

print が関数になっている。

ver2
        print "abc"

ver3
       print("abc")


文字列のバイト配列が、明確に区別された為に、苦労した。

バイト配列にしたい時は、文字列の前に"b"をつければOKだ

                        c = b"STOP-PROCESS"
                        os.write( self.pipeout0, c)


リードしたするとバイト配列で返却されるので、
 デコードして文字列とするのだ。

                        line = os.read( rready[0], 1024)
                        line = line.decode()


逆にバイト配列にしたい場合は、encode()を使用する



                        line = line.decode()



🔸バージョン変換する場合には、環境も整備しなければいけない
 モジュール(numpy)をインストールのときもいろいろあったなー

pipもバージョンがあるらしい
pip3でもよいが、3.4か3.5か3.6かを指定したい場合は、
以下のようにやりました。
さすがに、pip3.4 とか pip3.6とかはないので。。。

  python3.6 -m pip install  numpy


Ubuntu add-apt-repositoryがなかったりしましたが
すべて完了してしまった。



version は、3.6が入った、モジュールもなんとか入った。





----------------------------------------------------------------------------------
誰でも簡単に使える、 クラウド パイソンデバッカー (IDE/編集可能)
 Npdb

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

2018年7月22日日曜日

python debugger (pdb vs npdb)

パイソンの標準デバッカー(pdb)とクラウドデバッカー(npdb)

■デバックについて

プログラムを書き実行してみると、うまくいかない事が多い。
1回で動く事は、稀でありそのためにデバック作業が発生するのである。

自分の経験(40年前から)から、全然かわらないが
一つ言える事がある、以前より大変になった事である。

人間社会も同じことだけど、プログラム環境もより複雑になり多くの時間を
簡単なことに費やしています。

では、デバックの基本とは、

①プログラムの流れが正しいかを確認
②変数(データ)が正しく設定されているか
③後、厄介なのは、タイミングである
 以前(大昔)は、必ずプログラムの流れは1つであったが、
 スレッド、プロセス、タイマー、割り込みなど、ある処理が動作している時に
 他の流れを考えながらデバックをしなけらばいけない。

①、②は画面などに表示をしてみる事で、だいたい大丈夫。
③はタイミングなので、ファイルにプログラムの流れをタイムスタンプと一緒に書き込みを
 おこない確認をするしかない。
 へたにデバッカーに頼ると思いもかけない時間を浪費してしまう。


■デバッカーは必要か?

 自分は、NOと言いたいがどんなもんだろうか?
 自分が若い時は、コボルという事務処理言語かなり主流だった

 勿論、デバッカーなど無い大型コンピュータでプログラムをタイピストに依頼して
 マシンタイムに動作させ、結果を確認。
 問題があれば、Display文などを、お粗末なエディターで数行いれて、
 実行待ち、複数人数で使用しているから結果はすぐにはでない。

 そしてその日の割り当てられたマシンタイムは終わり、結果印刷物を会社に持って帰り
 再検討、机上デバックする。

 こんな感じであった、勿論再検討する際にはデバックをおこなう、机上で変数名に現在何が
 入っているか?もしこちらに処理が移ってしまっていたらどうなるのか?

 かなり机上で確認しているから、実際のマシンタイムではうまく動いていくのである。

 3回ぐらいマシンで正常動作させて、次にはテストフェーズにはいる。
 テストケースを机上で考えて、前述のように周到な準備をおこない。
 テストをおこなう。

 今思うとなつかしい。
 

■pdb





変数名
変数名=

順番に、

step, next, return, continue, break
であるなんとなく想像できる単語である

stepは単語の意味どうり
1行ごとだけど、日が暮れちゃうね

nextはstepよりちょっと早くできる、関数、メソッドを通過する
関数値等を確認は、nextを実行後代入された内容をみてみる
(いまさらですが、現在の実行を示す位置は、実行前ですよ)

returnは、stepで関数内部に入り、途中で関数から出たくなった場合に使う。
pdbでは、関数をリターンする前に止まるので、ここでも関数値を確認できる

「関数値の確認方法」

continue文
cでオーケーだが、contでもいい。
時にはcontと打ってデバックをしたいと思うが、自分の性格上だめである

cont,continue(スペル間違いが無ければいいが)を打つ余裕が、時短で良いデバックができるのも
真実であるように思える。

自分は煙草を吸わないが、家事や身の回り、机まわり等を掃除、整頓するのも良いのではないかな。

また、難問にぶつかってしまったら、散歩、買い物をするのも良いのでは。。
(自分は、買い物でアルコールを買うので、そこまでのデバックなってしまうので。。。どうか)

おすすめは、最初に「contする」です
パイソンの場合は、コンパイルしないでの実行時にエラーが発生するからです。

もしかすると、最初で天国に行くことができて、弾みがでて細かなデバックができることも
多々あるからです。

うまくいかない場合は、適当なところにbreak文でストップしてみましょう。

以外とその途中まで行っていないケースは自分の場合多かったです。

最初にimport
次にファイルの入力
関数をコールしてなかった、条件がかなり違っているなど。

様々ですが、本当はプルグラムを印刷して机上デバックすればかなり早いのですが。。。

時代ですね。。。

今日は、ここまで終わりです。

歯科に行く予定なので、一時的な公開をしますよ




以下は、未完ですよ
(上もこれからだけど)



これだけをマスターすれば、快適なデバックが行える。


しかし、もっと単純化すれば以下の3単語(コマンド)だけでよいのかもしれません。
tbreak
cont
p 変数名

tbreakとは、一時的なブレークポイントである

書き方は、tbreak ファイル名:行番号でファイル名を省略することもできます

次に、「cont」コマンドでブレークポイントまで処理を実行

実行後に変数の内容を確認する

※p 変数名で変数の内容が表示されるが、変数名がデバッカーのコマンド
重複しない場合は、pは省略可能であります。





最初に、対象のスクリプを表示してみましょう。


次に対象の関数内で処理を止めてみる
(いわゆるブレークポイントの設定である)

そこ箇所の変数名を表示してみる

関数の値を確認する



次回は、例題をあげてデバックしてみたいですね


例題1

1〜10までを加算するプログラム


例題2

文字列を扱う






デバック、デバッカーとは

プログラムは、命令文である
命令文には、決まり事があり人には間違いがある

そのためにデバックが必要なのだ。




2018年7月19日木曜日

python debugger (npdb drag and drop)


Try debugging (dragging existing source)


I will show you how to debug easily.

     
a source program on the net and a program created by oneself
  
Just drag the source you want to debug to the editor panel.

    


Npdb


Click the icon (new)



Enter file name


Open sample program on the net
draug and drop




If you do not enter file name, you get error.

2018年7月18日水曜日

python IDE ( Npdb)

Npdb (python IDE&cloud)

URL
Npd

read and write files from local PC

            

To read the file from the local PC, click the icon (open)
A file selection window will be displayed, so select the file.






To download the file to the local PC, click the icon (save).
 


          
 


Npdb(パイソンIDE&クラウド)

ローカルPCのファイルのリードとライト
            
ローカルPCからファイルをリードするには、アイコン(open)をクリックします
ファイル選択のウインドウが表示されますので、ファイルを選択してください。




ファイルをローカルPCにダウンロードするに、アイコン(save)をクリックします。

          
 

2018年7月16日月曜日

python IDE (Edit,Debug)


Npdb

In the cloud, Python's debugging and editing is possible.

The URL is here
http://simple-and-useful.net/netpdb/npdb.html


When the screen is displayed, hello.py source code is displayed
It is debug start by icon (debug-start).



It is now in edit mode



When you click the debug icon, the color changed green and
change to debug mode





Click the icon (next) to go to the next step,

When the debug line reaches the last line, it restarts and returns to the first line.




NpdbWhen you click the debug icon (debug-end)

debug finished and editing becomes possible



パイソンIDE (Edit,Debug)


Npdb

クラウドで、パイソンのデバッグと編集ができるのだ。

URLはこちらだ
http://simple-and-useful.net/netpdb/npdb.html


画面が表示されると、hello.pyのソースコードが表示される
アイコン(debug-start)でデバック開始である。



現在は編集モードですよ



デバックアイコンをクリックすると、色がグリーンになり
デバックモードになる





アイコン(next)をクリックすると次のステップにいきます、

プログラムが最後の行になると、リスタートして最初の行に戻ります。




デバックアイコン(debug-end)をクリックすると

デバックが終了して、編集が可能になります