MySQL查詢和修正auto_increment的辦法。本站提示廣大學習愛好者:(MySQL查詢和修正auto_increment的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL查詢和修正auto_increment的辦法正文
這是一個我用於調試或剖析對象概述,紛歧定是完全周全,假如你曉得更好的對象,請在評論處標志。
日記
是的,切實其實,不能不強調足夠的日記記載對運用法式是何等的主要。您應當記載主要的器械,假如你的記載足夠好的話,你可以從日記中找出成績從而節儉年夜量的時光。
假如你已經用print語句來調試代碼如今停下吧,用logging.debug替換,開端可以漸漸來,今後完整禁用它...
追蹤
有時看到法式若何被履行會很有贊助。你可使用IDE的調試共轭ngn一步一步的運轉法式,但你須要曉得你要找的是甚麼,不然這將會是一個漫長的進程。
尺度庫中有一個 trace模塊,可以打印一切履行進程中的內容(像制造 籠罩率申報)。
python -mtrace --trace script.py
這將發生年夜量輸入(每一個行會被打印輸入,所以你最好經由過程管道,用grep只看本身感興致的部門),例如:
python -mtrace --trace script.py | egrep '^(mod1.py|mod2.py)' -
假如你愛好新特征,那末你可以測驗考試 smiley - 它可以顯示變量內容變更,還可以用它來長途追蹤法式。
PDB
import pdb pdb.set_trace() # opens up pdb prompt
或許:
try: code that fails except: import pdb pdb.pm() # or pdb.post_mortem()
或(按鍵盤C鍵啟動劇本):
python -mpdb script.py
像在REPL中那樣:
簡直任何器械,評價以後幀的Python代碼(還有其他幾個敕令)
可以替換pdb的:
長途 PDB
sudo apt-get install winpdb
替換 pdb.set_trace():
import rpdb2 rpdb2.start_embedded_debugger("secretpassword")
如今運轉Winpdb , 輸出暗碼 到 File > Attach。
不愛好 Winpdb ? 只需經由過程 TCP運轉 PDB
應用上面代碼:
import loggging class Rdb(pdb.Pdb): """ This will run pdb as a ephemeral telnet service. Once you connect no one else can connect. On construction this object will block execution till a client has connected. Based on https://github.com/tamentis/rpdb I think ... To use this:: Rdb(4444).set_trace() Then run: telnet 127.0.0.1 4444 """ def __init__(self, port=0): self.old_stdout = sys.stdout self.old_stdin = sys.stdin self.listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.listen_socket.bind(('0.0.0.0', port)) if not port: logging.critical("PDB remote session open on: %s", self.listen_socket.getsockname()) print >> sys.__stderr__, "PDB remote session open on:", self.listen_socket.getsockname() sys.stderr.flush() self.listen_socket.listen(1) self.connected_socket, address = self.listen_socket.accept() self.handle = self.connected_socket.makefile('rw') pdb.Pdb.__init__(self, completekey='tab', stdin=self.handle, stdout=self.handle) sys.stdout = sys.stdin = self.handle def do_continue(self, arg): sys.stdout = self.old_stdout sys.stdin = self.old_stdin self.handle.close() self.connected_socket.close() self.listen_socket.close() self.set_continue() return 1 do_c = do_cont = do_continue def set_trace(): """ Opens a remote PDB on first available port. """ rdb = Rdb() rdb.set_trace()
想要 REPL ? IPython 怎樣樣?
假如你不須要一個全體的調試器,只需啟動IPython用上面的代碼:
import IPython IPython.embed()
尺度Linux對象
他們未被充足應用很令我驚奇。經由過程這些對象集你能弄清晰諸如這些的許多成績:從機能成績(太多的體系挪用,內存分派等)到逝世鎖,收集,磁盤等成績。
sudo apt-get install htop sudo htop
最有效的是降權運轉strace,只需運轉速凍 strace -P 12345 或strace-f 敕令參數(-f表現strace分支過程)。 平日有許多的輸入,你最好將輸入重定向輸入到一個文件(敕令後添加 &> 文件名)來停止更深刻的剖析。
然後就是ltrace,它和strace類似不外是經由過程庫挪用的,參數根本雷同。
lsof可以供給 你看過ltrace/ strace的處置號,如許應用:lsof -P 12345
讓跟蹤更深點
它很輕易應用和可以做許多事,條件是年夜家都曾經裝置了htop!
如今,找你所想的過程,僅僅須要按:
監督
沒有更好的替換品了,辦事器連續監督,你已經能否發明本身應用奇奇異怪的跟蹤辦法去找出為何哪裡慢了和資本怎樣被消費了,那末不要再被iotop, iftop, htop, iostat, vmstat等等干擾了,趕緊應用dstat吧,它可以做年夜多半上述的提到的對象能做的,並且可以做得更好!
它會以緊湊,時髦的代碼著色(親,不像iostat, vmstat喲)連續顯示你的數據,並且你可以一向看到以往的數據(與iftop, iotop, htop分歧喲)。
僅僅運轉這個:
dstat --cpu --io --mem --net --load --fs --vm --disk-util --disk-tps --freespace --swap --top-io --top-bio-adv
還有一點就是這裡還有更簡略的方法來寫喲,如shell汗青記載(shell history)或則重定名敕令(aliases)
GDB
這是一個相當龐雜和壯大的對象,但我僅僅觸及到基本的器械(設置和根本敕令)。
sudo apt-get install gdb python-dbg zcat /usr/share/doc/python2.7/gdbinit.gz > ~/.gdbinit run app with python2.7-dbg sudo gdb -p 12345
如今請應用:
bt- 客棧軌跡(C 級)
pystack- python 客棧軌跡,條件是你須要具有~/.gdbinit 並應用python-dbg
c(持續)
有湧現 segfaults 麼 ?用 faulthandler !
除Python 3.3其他的都邑湧現這個恐怖的毛病, 回到Python 2.x
只需依照上面來做,你至多會找到一條招致段毛病的緣由。
>>> import faulthandler >>> faulthandler.enable()
內存洩漏
好的,這裡有很多對象,個中有一些是專門用於WSGI 運用的,像Dozer,然則我最愛好的無疑是 objgraph。它是如斯驚人的便利和易於應用。它沒有與WSGI或任何其他器械繼續,所以你須要找到你本身的方法來運轉以下代碼:
>>> import objgraph >>> objs = objgraph.by_type("Request")[:15] >>> objgraph.show_backrefs(objs, max_depth=20, highlight=lambda v: v in objs, filename="/tmp/graph.png") Graph written to /tmp/objgraph-zbdM4z.dot (107 nodes) Image generated as /tmp/graph.png
你會獲得一個像 如許的圖表(正告:這個圖表異常年夜)。你也會獲得 dot輸入。
內存應用
有時你想應用更少的內存。少分派內存平日會使法式運轉的更快更好,用戶們都愛好千錘百煉:)
有很多對象可以拿來應用 [1] ,但在我看來最好的是pytracemalloc - 與其他對象比擬較,它的開支很小(不須要依附於減弱速度的 sys.settrace)而且它的輸入異常詳實。使人頭疼的是它的設置裝備擺設,由於須要你重編譯python,然則spt使其很輕易做到。
只需運轉以下敕令,然後你便可以去買午飯或許做其他事了:
apt-get source python2.7 cd python2.7-* wget https://github.com/wyplay/pytracemalloc/raw/master/python2.7_track_free_list.patch patch -p1 < python2.7_track_free_list.patch debuild -us -uc cd .. sudo dpkg -i python2.7-minimal_2.7*.deb python2.7-dev_*.deb
然後裝置pytracemalloc(請留意:假如你是在虛擬情況中做的這些操作,那末在python從新裝置後,你須要重建它-僅運轉virtualenv myenv便可):
pip install pytracemalloc
如今,你便可以經由過程以下代碼來封裝你的運用法式:
import tracemalloc, time tracemalloc.enable() top = tracemalloc.DisplayTop( 5000, # log the top 5000 locations file=open('/tmp/memory-profile-%s' % time.time(), "w") ) top.show_lineno = True try: # code that needs to be traced finally: top.display()
會獲得像上面如許的輸入:
2013-05-31 18:05:07: Top 5000 allocations per file and line #1: .../site-packages/billiard/_connection.py:198: size=1288 KiB, count=70 (+0), average=18 KiB #2: .../site-packages/billiard/_connection.py:199: size=1288 KiB, count=70 (+0), average=18 KiB #3: .../python2.7/importlib/__init__.py:37: size=459 KiB, count=5958 (+0), average=78 B #4: .../site-packages/amqp/transport.py:232: size=217 KiB, count=6960 (+0), average=32 B #5: .../site-packages/amqp/transport.py:231: size=206 KiB, count=8798 (+0), average=24 B #6: .../site-packages/amqp/serialization.py:210: size=199 KiB, count=822 (+0), average=248 B #7: .../lib/python2.7/socket.py:224: size=179 KiB, count=5947 (+0), average=30 B #8: .../celery/utils/term.py:89: size=172 KiB, count=1953 (+0), average=90 B #9: .../site-packages/kombu/connection.py:281: size=153 KiB, count=2400 (+0), average=65 B #10: .../site-packages/amqp/serialization.py:462: size=147 KiB, count=4704 (+0), average=32 B ...