You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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仅能在程序暂停状态下执行,你的代码设置断点后未等待程序触发断点就直接调用该命令,导致命令无法执行。调整方案如下:

  1. 设置断点后,先让程序运行并等待断点触发:
# 批量设置断点后
dbg.run()
dbg.wait_for_break()  # 等待程序暂停在断点处
  1. 再调用go_return(),若仍超时,可手动指定更长超时时间:
# 替换原有dbg.go_return()调用
dbg.cmd("Go.Return", timeout=10000)  # 超时时间设为10秒(单位毫秒)
  1. 检查Trace32远程连接配置:确保网络无防火墙拦截,Trace32的Remote设置允许Python端IP接入,连接稳定性是避免超时的基础。

内容的提问来源于stack exchange,提问作者Lakshmi Srikanta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:58:33