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

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

モジュールのサンプル

# -*- coding: utf-8 -*-

import sys
#import cv2
import simplejson


from datetime import *
from dateutil.relativedelta import *
import calendar


now = datetime.now()
today = date.today()
# 来月
print( now + relativedelta(months=+1) )
# 来月の次の週
print( now + relativedelta(months=+1, weeks=+1) )
# 来月の次の週のAM10時
print( now + relativedelta(months=+1, weeks=+1, hour=10) )
# datetimeだけでなくdateも使用可能
print( relativedelta(datetime(2003,10,24,10,0), today))



sys.path.append('/root/.pyenv/versions/3.6.5/lib/python36.zip' )
sys.path.append('/root/.pyenv/versions/3.6.5/lib/python3.6' )
sys.path.append('/root/.pyenv/versions/3.6.5/lib/python3.6/lib-dynload' )
sys.path.append('/root/.pyenv/versions/3.6.5/lib/python3.6/site-packages' )

import numpy
import json

import math #mathモジュールを読み込んでいます。
kyori = 20
kakudo = math.radians(32) #角度をラジアンに換算
takasa = kyori * math.tan(kakudo) #高さを計算
takasa = math.floor(takasa * 100)/100 #小数点以下第2位を切り捨て
print(str(takasa) + "m") #計算結果を文字列に変換して出力

print( "sample1" )
print( sys.version )

def funcNo1():
   
    data1= 100
   
    print( data1 )

   

   

funcNo1()


for i in range(5):
    print( i,"hello" )

2018年7月22日日曜日

python 文字列 (python vs JavaScript)

pyhtonの文字列操作


まとめ(python vs JavaScript


・型変換 似ているね

パイソン
  int(), str() 

JavaScript
 Number(), String()



※以下は順番に パイソン、JavaScript

・変換は同じで、replaceでいきましょ!

・長さは、len()関数、length(プロパティか?)

・空白削除は、strip, trimではなくreplaceがよさげ(trimはブラウザ未対応あり)

・部分文字列は、スライスでいこう。書き方がちがうよ

・文字列検索は、find, indexOf ( Ofの最初は大文字だよ,
               無い場合は、-1をどちらも返却しますよ )


※型判定 type()関数,  typeof 変数名
 長さ取得みたい〜



■長さは、len

>>> a="koba "
>>> a
'koba '
>>>
>>> len(a)
5



■部分文字列はスライスでやるよ

開始インデックス:終了インデックスを指定します

>>> a
'koba '
>>> a[1:3]
'ob'



先頭から2文字
>>> a
'koba ' ※わかりやすくスペースを全角にしました
>>> a[:2]
'ko'

お尻から2文字
>>> a[-2:]
'a ' ※わかりやすくスペースを全角にしました



■検索(find)


>>> a="kobayashi yamada"
>>> a
'kobayashi yamada'

>>> a.find("koba")
0
>>> a.find("y")
4
>>> a.find("yo")
-1
>>> a.find("yamada")
10
>>> a.find("yama")
10

>>> a.find("yamada2")
-1

■置換(replace)

>>> a
'koba '
>>> a.replace("k","K")
'Koba '


■空白削除(タブ文字、改行(\r,\n))
   
>>> a
'koba '


>>> b= a.strip()
>>> b
'koba'



■データ型の判定

>>> intData = 12
>>> strData = "34"

>>> type( intData)
<type 'int'>
>>> type( strData )
<type 'str'>

>>> str( intData )
'12'
>>> int( strData )
34
>>>



最後に文字列結合は
プラス記号で結合できますよ

※パイソン、JavaScriptでは、ダブル、シングルクォートどちらも同じ扱いらしい
(エスケープ処理に違いがない)






JavaScriptもついでに解説


■長さ(プロパティなのか?)

var str = 'hello';
console.log( str.length );

> 5


■部分文字列(slice)
スライスでいくと、パイソンと同じ感じになりますね〜

var value = 'koba';
data = value.slice( 0,2 );
console.log( data );

data = value.slice( -2 );
console.log( data );

data = value.slice( 1,3 );
console.log( data );

> "ko"
> "ba"
> "ob"


■検索 (indexOf)
var value = 'koba yama';
data = value.indexOf("ba ");
console.log( data );

data = value.indexOf("y");
console.log( data );

data = value.indexOf("yama2");
console.log( data );

> 2
> 5
> -1


■置換(replace)

var value = 'koba '; 
data = value.replace("k", "K"); 
console.log( data ); 

> "Koba "

■スペースを取り除く

trimがあるが、ブラウザ未対応があるので、以下を参考に

var value = 'koba';
data = value.replace(/^\s+|\s+$/g,'');   (※正規表現でこのままで利用)
console.log( data );

> "koba"


■型変換
var value = 123
data = String(value);
console.log( typeof data );
console.log( data );

var value = '123';
data = Number(value);
console.log( typeof data );
console.log( data );

> "string"
> "123"

> "number"
> 123


※データ型の判定は、 typeof




おまけのパイソン
■文字列の繰り返し

>>> print "*" * 50
**************************************************
>>> a="koba "
>>> print a*3
koba koba koba 

※デバックで画面表示に使えるかもね

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)をクリックすると

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



2018年7月14日土曜日

pdb9 開発日誌

今日は、バグ一覧

未実装
・whereコマンド
・ボタンくりっくでのclear all
・disable,enable
・all disable,enable



バグ
clコマンドの直後での”N"がnextになる
デバックコマンドのパネルをクリックすると、コマンド入力行にカーソルが行ってしまう
locals()の表示が、遅い
デバック開始時に、フォーカス設定がNGで、コマンドライン入力域がクリアされていない

ローカル変数表示で画面にその内容が表示されてしまう!





dbgC.py:358: self.dbgVal0 ="for  __key in locals().keys(): print '%s,%s,%s,kaigyou-cd'  %( __key, type( locals()[ __key ] ), locals()[ __key ] )  if __key !='__builtins__' else ',,,kaigyou-cd' "
dbgC.py:436: if hanteiSTD.cmd[0:5]== self.dbgVal0[0:5]:
dbgC.py:487: cmd = self.dbgVal0
dbgC.py:507: cmd = self.dbgVal0
dbgC.py:529: if hanteiSTD.cmd[0:5] != self.dbgVal0[0:5]:
dbgC.py:931: cmd = self.dbgVal0
Found 6 matches for "dbgVal0".

3連休だ〜

だけれども、猛暑だ、今年はたいへんらしい

クラーに期待したい。

さて

今日の日報

javascriptで問題が発生

ieではjavascriptでitemは予約後だったらしい。

splitでよく自分は,
itemを利用してしまうが、それがNGだった。。。

IE
では、結構、厳密にjavascriptでエラーになる

たぶんselectの終了タグ

めんどくさい!!!

おわり




2018年5月4日金曜日

wxStyledTextCtrl

先日は、風がとても強くて、嫌な一日だった。
こんな日は誰も外には行きたくなら思いながら、買い物に行った。

案の定誰もいない、でも寿司が半額になっていたので良かったです。

wxStyledTextCtrl
で指定されたところに色を付けたいと思いネットでくぐってみたら、騙された。

以下のソースです。

StyleSetSpec( 4, "back:#F000F0,bold")

pos =10
txt.StartStyling(pos, 0xffff)

txt.SetStyling(   10,  4 )

txt.SetStyling(   pos,  0 )


2018年4月30日月曜日

wxPytyhon 画面がかたまる

イベント駆動での問題で解決を試みたが、大変でした。

問題のプログララムは

あるスレッドからのデータを取得するとのことです、

もちろん、スレッドには興味はないのですが。。

イベント作成してバインドして取得しましたが、ボタンなどGUIのフォーカスが当たらなく

wx.Yieldなど(前にtime.sleepが必要とのこと)ですが全然だめでした。

また、その処理自体をスレッドするのもよいのかもしれませんが

自分は
自分のイベントどリブデンを作成して、その問題を解決しようと思いました。

参考のソースです。


app =MyApp()
app.MainLoop()
exit(0)




"""Drives the main wx event loop."""
evtloop = wx.EventLoop()
wx.EventLoop.SetActive( evtloop)


i =0
while 1:
    while evtloop.Pending(): # if there is at least one event to be processed
        evtloop.Dispatch() # process one event
    #~ time.sleep(0.10)  
    evtloop.ProcessIdle()
    #~ abc()



このソースは、通常に行えるようになっています。

"""
app =MyApp()
app.MainLoop()
exit(0)
"""

これが通常ですが。。。


なをかつ、いベントではなくキューによりデータをスレッドより取得するように変更しました。
なぜなら、
自作イベントを作成してスレッドからデータを取得しようとすると、画面が固まって
しまうからです。

その解決として、自作のイベントループを作成しました。

ただ、ここで後でわかった事ですが、自作イベントは不十分な機能でありました、
ネットでは、このソースでの参照が多いのですが、以下が問題です。


1.ターマー割り込みが使えない

2.toolTipが使えない

3.キューを使用していたが、オープンダイアログが別イベンドどリブデン機能なので、そこで問題が発生する。
(オープンダイアログを開くと、そちらのイベントドリブデン「上記ソース」が機能しなくない自身のそれが機能しておかしな動きになる)

      self.que.task_done()
      self.que  = None


      #~ if self.que != None:
          #~ self.que  = None

          #~ while not self.que.empty():
              #~ c = queData.get()
              #~ print "xxx=",c
              #~ self.que.task_done()
   
これで、キューデータが消えて処理を中断できたのだったが、あの忌々しいオープンダイアログ
で問題が以前の状態になってしまった。

自作のイベント処理機能
      self.que.task_done()
      self.que  = None
      #~ if self.que != None:
          #~ self.que  = None

          #~ while not self.que.empty():
              #~ c = queData.get()
              #~ print "xxx=",c
              #~ self.que.task_done()
   
機能しなくなった為である、ネットで読んだことがあったので、ピンときた、
ダイアログボックスのイベント処理機能が別に存在して、悪さをしていろのかと思った。


◎最後には解決策が見つかった。

キューでスレッドとのデータ受け取り(受信のみ)は、正解です。
画面はかたまりません。

以下にソースを。。。




    wx.Frame.__init__(self, *args, **kwargs)
    #~ wx.Frame.__init__(self, wx.ID_ANY, u"pdb9 (ver3.0)", size=(600,400),
                        #~ style=wx.DEFAULT_FRAME_STYLE|wx.WS_EX_PROCESS_IDLE )
    #~ self.frame = FrameEx(None, wx.ID_ANY, u"pdb9 (ver3.0)", size=(600,400))

   

  #----------------------------------------------------------------------
  def OnIdle(self, evt):
      #~ print "kita", self.ix
      #~ self.ix +=1
     
      #~ time.sleep( 0.0001)      
      config.dbg.procQue()
      evt.RequestMore()



大切なところ。。。
wx.WS_EX_PROCESS_IDLE

かな


では、
次回は、ツールチップが動作しなったので、自作をしてしまいました。


以下が参考

           
             
              value = s.strip()
              if value[:3] !="***":
                wx.CallAfter(config.edPaneInst.fileInst.SetToolTipString, "%s = %s" % (expr, value))
                #~ tip = wx.TipWindow(config.edPaneInst.fileInst, "ddddddd", 30)
                #~ rect = wx.Rect( 0,0, 500,500)
                #~ tip.SetBoundingRect(rect)
                #~ print "toolTip test"
             
              self.pdbData = ""
              self.stepStep = 0
 



wx.TipWindow
を使用して自作のツールチップについで書きたいと思います。


では、コンビニに行き、楽天ドリンクを買ってきます。

いつもの店員さんいるかな?

では


先日からは、ゴールデンウーィクです。
今は最中なので。。。

三日間は、pdb9という、ソフトのメンテナ酢で開けるくていました。

やったことは、
その前に、このブログシステム個人を監視しているせいかもしれないが、英語のインターフェースになったいます。

仕組みは、個人を特定。
どの言語の参照が多いかをデータベースかして、その個人が関係したしたら、その言語を表示する
仕組みでしょうか。。。。

日本人なのに、日本語の投稿しかしていないのに、ゴーグルのAIはこれから。。。

なのか。。。。



さて本題は、個人メモですが、


パイソンのでデバッカーpdbについてです(自分は、pdb9というデバッカー+エディターんppdb9を作成していますが)


作成している関係、以下の問題を発見しました。
いくつかのサイトで指摘がありましたが、そのデバッカーに問題があるとの感じの投稿が多かったみたいです。

問題
呼び出した関数内での、変数変更ができない

自分が検証した結果は、変数変更後にwhereコマンドを行っては行けない、
値が反映されません。

以上です。

悩む人は、結構いると思いますよ!!!




2018年4月24日火曜日

wxPython

イベントループについてであります。

まずはソースを見てくださいね!

これを
 app.MainLoop()
   
これで置き換えます

    evtloop = wx.GUIEventLoop()
    evtloop = wx.EventLoop()
    wx.EventLoop.SetActive( evtloop)

    """Drives the main wx event loop."""
   
    i =0
    while 1:
        while evtloop.Pending(): # if there is at least one event to be processed
            evtloop.Dispatch() # process one event
        #~ time.sleep(0.10)  
        evtloop.ProcessIdle()
        #~ print "***",i


メインのループイベントを
MainLoopを自作で作成したわけです。


一応は問題はなしだけど、
以下が問題になってしまった。

この後は、後日書きます


2018年4月15日日曜日

本日はサウナに行った(styledTextCtrl)

今日は、午前中は雨っだので最悪の日であったが

午後は少し良くなったので、以下を楽しんだよ


・風薬を買った
・サウナに示唆しぶりに行った

・styledTextCtrlで1行を反転する方法がわかった

そのたとしては、ダイアロクボックスとの通信(イベントによる)
pdbの簡易デバックカーを作成した。



2018年3月29日木曜日

pdb9 開発日誌

ブレークポイント 全削除機能を確認しました。 バグ発生 コマンドラインでclでは良いがclearではダメです 検索機能でバグ発生 検索にヒットするものが無いときに発生する RuntimeError: maximum recursion depth exceeded in cmp 設計編 ブレークポイントの無効 イネーブル ■欲しい機能 ブレークポイント すべていネーブルにして実行 関数、クラス一覧 4/2 monday self.bpTbl ブレークポイントのテーブル 辞書 キーは フルパスファイル名:行番号 値は ブレーク番号 cmdSrcの bpStat キーは行番号 値は、その行の状態 状態は、 そのキーが無いときは、その行は、ブレクポイントは設定されていない キーがあるときは ブレクーポイント中、disable.enable 使用箇所  

2018年3月12日月曜日

pdb8の開発日誌

本日はバグ対応

ブレークぽんとの表示

dbgC.pyのAppendのフォーマットを修正しました。


tcWhere,tcBreakで検索しました。

editNoteに本体はありますけど






  '''
  ブレークポイント右下に表示
    bpTblは使用しないようにする
  
  '''
  def setTextCtrl( self ):
    ''' ブレークコントロール情報をフォーマットする '''
    config.noteInst.tcBreak.Clear()

    bpTbl =[]
    for key in self.bpTbl:
      s = key.split(":")
      l = len( s )
      s2= s[ l-2 ] + ":%010d" %( int( s[ l -1 ] ) )
      bpTbl.append( s2 )
    #print bpTbl

    bpTbl.sort()
    for data in bpTbl:
      sss = data.split(":")
      #print sss
      l = len( sss )
      fn = os.path.basename( sss[l-2]  ).strip()
      no = int( sss[ l-1 ] )
      sss2= "%-20s (%d)" %( fn, no )
      #print sss2
      config.noteInst.tcBreak.AppendText( sss2 + "\n"  )



dbgC.py

    # スタック情報
    if hanteiSTD.cmd== "w":
      if self.rcvData[-6:-1] != "(Pdb)":
        return
      else:
        #print "kitayo----------"
        self.rcvData = self.rcvData.split( "\n" )
        config.noteInst.tcWhere.Clear()
        for s in self.rcvData:
          """
          kitayo----------
            /usr/lib/python2.7/bdb.py(387)run()
            <string>(1)<module>()
            /home/koba/fx/wpdb/1st.py(68)<module>()
          > /home/koba/fx/wpdb/1st.py(42)func2()->123
          """
          if s[:1] == " " or s[:1] == ">":
            if s.endswith(")run()"):  continue
            if s.endswith("<module>()") and s.startswith( "  <string>" ):  continue

            if "->" in s:
              l = s.index("->")
              s = s[0:l]

            s = s[2:]
            #print s
            s = s.replace("("," ")
            s = s.replace(")"," ")
            s = s.split(" ")
            fn = os.path.basename( s[0] )
            no = int( s[1] )
            s = "%-20s (%d) %-15s" %( fn, no, s[2])
            config.noteInst.tcWhere.AppendText( s + "\n"  )

          #if s== "(Pdb) ":
            #self.txt.AppendColorLine( s+ "" )       # コマンドプロンプトを表示するばあい

        # 変数表示の為に
        self.stepStep=2
        self.pdb.cmd( self.dbgVal1 )
        self.rcvData =""
        return

python debugger (pdb9.py)

パイソンデバッカーのpdb9の機能

ダウンロードは
http://net.programming.jp/wpd/

pdb9は、IDE(エディターとデバッカー)です。


pdb9は、
パイソンの簡易なエディターとデバック機能がある開発環境です。
IDEではあるが、シンプルで使いやすさを求めた設計にしました。



編集機能

ライン番号によるカーソル移動と、選択機能
・そのライン番号をくりっくするとその行にカーソルが移動する
・再度くりっくすると、ワードごとに右側にカーソル移動
・指定時間マウスをダウン状態にすると選択することができます

編集のショートカットキーについて
コントロール + N ファイル新規
コントロール + O ファイルオープン
コントロール + S ファイル保存
コントロール + D 行の複製

2018年2月17日土曜日

どちらが良い?

ふと、思い出したのでここに書きたいと思います。


今では、ほぼ引退状態(エンジニア)ですが

DBのテーブル設計でのある中堅のソフト会社

リーダーとのことで配置だが、何かがおそまつ

まーそれは、よくあるので。。。

テーブル設計でのこと

繰り返しのデータ項目、自分はシンプルさが良いとの設計だったが、

若輩の本ベースの知識の人は、ウムウムもう十年前でどうでもいいけど

若造の浅知識なのかなとふと今更思いました。

別に年配を尊敬しろとは言わないけど、あとでどうなるかは自分の方が一段上かなと思う

最近でした。

モチロン、そうでない若者も自分はよく知っています。