使用pyrcl远程控制Trace32:断点设置与Go.Return超时问题求助
问题1:设置断点时的参数错误
初始代码
import lauterbach.trace32.rcl as t32 dbg = t32.autoconnect() self = dbg.symbol.query_by_name(name='ComMainFunctionTx') print(self) bp = dbg.breakpoint.set(*"ComComMainFunctionTx ",**())
错误输出
ComComMainFunctionTx P:0x801bacf0 930 Traceback (most recent call last): File "c:\Users\Desktop\test hello.py", line 24, in <module> bpt=dbg.breakpoint.set(*"ComComMainFunctionTx ",**()) TypeError: lauterbach.trace32.rcl._rc._breakpoint.BreakpointService.set() argument after ** must be a mapping, not tuple
解决方法
原调用语法完全错误:*"ComComMainFunctionTx "会将字符串拆分为单个字符作为位置参数,**()是无效写法(空元组不属于映射类型)。正确的断点设置方式有两种:
- 通过符号名设置:
bp = dbg.breakpoint.set(name="ComComMainFunctionTx")
- 通过符号地址设置(利用已查询到的符号对象):
sym = dbg.symbol.query_by_name(name='ComComMainFunctionTx') bp = dbg.breakpoint.set(address=sym.address)
问题2:调用
dbg.go_return()时的超时错误 修改后的代码
data=pd.read_csv("useR1.csv") # converting column data to list ARG = data['Arguments'].tolist() for i in ARG: mysys = dbg.symbol.query_by_name(name=i) bp = dbg.breakpoint.set(address=mysys.address) dbg.go_return() Break
错误输出
File "c:\Users\Desktop\IT_Script\test hello.py", line 70, in <module> dbg.go_return() File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\lauterbach\trace32\rcl\rcl.py", line 429, in go_return self.cmd("Go.Return") File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\lauterbach\trace32\rcl\_rc\_command.py", line 16, in __call__ self.__conn._cmd(cmd) File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\lauterbach\trace32\rcl\rcl.py", line 284, in _cmd self.__library.t32_executecommand(cmd.encode(), 4096) File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\lauterbach\trace32\rcl\_rc\_library.py", line 429, in t32_executecommand return self.generic_api_call( File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\lauterbach\trace32\rcl\_rc\_library.py", line 313, in generic_api_call recv_data = self._link.receive() File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\lauterbach\trace32\rcl\_rc\hlinknet.py", line 649, in receive raise ApiConnectionTimeoutError(str(e)) from None lauterbach.trace32.rcl._rc._error.ApiConnectionTimeoutError: timed out
解决方法
超时原因是Go.Return仅能在程序暂停状态下执行,你的代码设置断点后未等待程序触发断点就直接调用该命令,导致命令无法执行。调整方案如下:
- 设置断点后,先让程序运行并等待断点触发:
# 批量设置断点后 dbg.run() dbg.wait_for_break() # 等待程序暂停在断点处
- 再调用
go_return(),若仍超时,可手动指定更长超时时间:
# 替换原有dbg.go_return()调用 dbg.cmd("Go.Return", timeout=10000) # 超时时间设为10秒(单位毫秒)
- 检查Trace32远程连接配置:确保网络无防火墙拦截,Trace32的
Remote设置允许Python端IP接入,连接稳定性是避免超时的基础。
内容的提问来源于stack exchange,提问作者Lakshmi Srikanta
相关产品推荐
相关产品推荐

