2
我正在嘗試穿過一個線程。這個工程雖然我使用debugger.SetAsync(False)
,但我想這樣做異步。這裏是一個腳本來重現它。它在設置debugger.SetAsync (False)
而不是True
時步驟。我加了time.sleep
,以便有時間執行我的指示。我希望下一個指令在frame.pcLLDB Python/C++綁定:異步步驟說明
import time
import sys
lldb_path = "/Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Resources/Python"
sys.path = sys.path + [lldb_path]
import lldb
import os
exe = "./a.out"
debugger = lldb.SBDebugger.Create()
debugger.SetAsync (True) # change this to False, to make it work
target = debugger.CreateTargetWithFileAndArch (exe, lldb.LLDB_ARCH_DEFAULT)
if target:
main_bp = target.BreakpointCreateByName ("main", target.GetExecutable().GetFilename())
print main_bp
launch_info = lldb.SBLaunchInfo(None)
launch_info.SetExecutableFile (lldb.SBFileSpec(exe), True)
error = lldb.SBError()
process = target.Launch (launch_info, error)
time.sleep(1)
# Make sure the launch went ok
if process:
# Print some simple process info
state = process.GetState()
print 'process state'
print state
thread = process.GetThreadAtIndex(0)
frame = thread.GetFrameAtIndex(0)
print 'stop loc'
print hex(frame.pc)
print 'thread stop reason'
print thread.stop_reason
print 'stepping'
thread.StepInstruction(False)
time.sleep(1)
print 'process state'
print process.GetState()
print 'thread stop reason'
print thread.stop_reason
frame = thread.GetFrameAtIndex(0)
print 'stop loc'
print hex(frame.pc) # invalid output?
版本:LLDB-340.4.110(在Xcode提供)
的Python:Python的2.7.10
操作系統:Mac約塞米蒂
我的調試器交互在一個不能阻塞的線程上運行。所以當我調用'thread.StepInstruction(False)'時,我不在乎下一個狀態,我只想觸發事件,然後再看看這個過程並檢測它的狀態。所以在我再次看看這個過程之前,我必須爲每一個我觸發的事件設置「WaitForEvent」。 –
是的,沒錯。這樣事件隊列和進程狀態保持同步。 –
將一個漂亮的等待循環轉換爲輪詢似乎很難,但無論如何,要輪詢你想要的GetNextEvent,如果有的話會得到一個事件,如果沒有則返回一個空的事件。 –