[英]How do you automate the launching/debugging of large scale projects?
場景:
有一個復雜的軟件很難手動啟動。 我所做的是創建一個python腳本來啟動可執行文件並附加gdb進行調試。
流程啟動腳本:
LD_LIBRARY_PATH
變量中。 該腳本有效,但有一點需要注意。 ctrl-c不會中斷debugee並將控制權返回給gdb。 因此,如果我“繼續”沒有活動斷點,我永遠不能再次停止該過程,它必須從另一個shell中被殺死/中斷。 順便說一句,運行“kill -s SIGINT <pid>”,其中<pid>是調試對象的pid確實讓我回到了gdb的提示......但是這樣做是非常煩人的
起初我以為Python正在抓取SIGINT信號,但事實並非如此,因為我設置信號處理程序將信號轉發給debugee並且不能解決問題。
我已經嘗試了各種配置到python腳本(調用os.spawn *而不是子進程等)似乎無論如何,如果python啟動子進程,SIGINT(ctrl-c)信號不要被路由到gdb或子進程。
目前的思路
信息:
我考慮的替代方案:
問題:如何自動啟動/調試大型項目?
更新:我已經嘗試了下面的Nicholas Riley的例子,在家里的Macintosh上他們都允許cntl-c工作到不同程度,在生產盒子上(我現在認為可能正在運行SELinux)他們不...
您可以嘗試忽略它,而不是將信號從Python轉發到調試對象。 以下對我有用:
import signal
signal.signal(signal.SIGINT, signal.SIG_IGN)
import subprocess
cat = subprocess.Popen(['cat'])
subprocess.call(['gdb', '--pid=%d' % cat.pid])
有了這個,我能夠在GDB中重復進行^ C並且沒有問題地中斷調試對象,但是我確實看到了一些奇怪的行為。
順便說一下,在將信號轉發到目標進程時我也沒有問題。
import subprocess
cat = subprocess.Popen(['cat'])
import signal, os
signal.signal(signal.SIGINT,
lambda signum, frame: os.kill(cat.pid, signum))
subprocess.call(['gdb', '--pid=%d' % cat.pid])
那么,你的情況可能會發生其他事情嗎? 如果你發布一些破解的代碼,它可能會有所幫助。
你的評論指出你正在用膩子砸...你有控制權嗎? 使用openssh,您可能希望添加-T選項,我不知道/如果putty將以您使用它的方式執行此操作。
另外:你可能會嘗試使用cygwin的ssh而不是putty。
如果您已經設置了當前腳本來執行此操作,但是在自動執行部分腳本時遇到問題,可能您只需抓住期望並使用它來提供設置,然后退回到交互模式以期啟動該過程。 然后你仍然可以讓你的ctrl-c中斷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.