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

如何在Cairo代码中添加追踪信息?旧版with_attr的替代方案是什么?

在Cairo中添加追踪信息及旧版调试属性的替代方案

一、在Cairo代码中添加追踪信息

Cairo提供了多种适配不同场景的追踪信息添加方式:

  • 使用debug_print内置函数
    这是最直接的调试手段,可输出变量值或自定义字符串,仅在调试模式下生效,生产环境编译时会被自动移除。示例:

    fn process_data(value: felt252) {
        debug_print('Processing value:');
        debug_print(value);
        // 业务逻辑代码
    }
    
  • 封装自定义追踪函数
    如果需要分级或格式化的追踪输出,可以自行封装函数实现:

    fn log(message: felt252, level: felt252) {
        debug_print(level + ': ' + message);
    }
    
    fn main() {
        log('Starting main function', 'INFO');
        let result = calculate(10);
        log('Calculation result: ' + result, 'DEBUG');
    }
    
  • 合约事件追踪
    针对合约场景,可通过定义事件记录关键操作,事件会被写入链上日志,方便后续查询验证:

    #[event]
    fn Transfer(from: felt252, to: felt252, amount: u256) {}
    
    fn transfer(ref self: ContractState, to: felt252, amount: u256) {
        // 转账逻辑处理
        Transfer(self.owner, to, amount);
    }
    

二、旧版with_attr的等效方法

旧版Cairo的with_attr用于给合约或函数附加调试属性,在新版Cairo(1.x及以上版本)中,对应的替代方案如下:

  • 使用#[debug]属性
    直接在函数或合约上标记#[debug]属性,即可启用该单元的调试信息保留(如变量追踪、栈信息等):

    #[debug]
    fn debug_enabled_function() {
        // 函数逻辑代码
    }
    
    #[debug]
    #[contract]
    mod DebugContract {
        // 合约代码实现
    }
    
  • 全局启用调试编译
    编译时添加--debug参数,可全局启用所有代码的调试信息,替代旧版批量使用with_attr的场景:

    cairo-compile --debug src/contract.cairo --output build/contract.json
    
  • 自定义属性宏(进阶)
    如果需要高度自定义的属性逻辑,可以使用Cairo的属性宏系统实现类似with_attr的功能,示例:

    #[derive(Attribute)]
    struct CustomDebug;
    
    #[CustomDebug]
    fn custom_debug_function() {
        // 逻辑实现代码
    }
    

    这种方式适合复杂场景,日常调试使用#[debug]属性或编译参数即可满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 15:52:33