【问题标题】:DTrace: how to print out memory buffersDTrace:如何打印出内存缓冲区
【发布时间】:2010-08-09 06:56:32
【问题描述】:

我需要跟踪对某个特定文件所做的所有 pwrite(2) 调用,并打印所有要逐字节写入的缓冲区。预期的数据不是 ASCII 字符串格式,所以我不能使用:

printf("%s\n", copyinstr(arg1))

我了解了 copyin(arg1, arg2),但这给了我一个 void* 并且我发现的所有示例都通过调用 stringof 再次将其转换为字符串,例如:

printf("%s\n", stringof(copyin(arg1, arg2)))

我需要以某种方式显示复制缓冲区中的所有字节。有什么建议吗?

谢谢你, 英索。

【问题讨论】:

    标签: dtrace


    【解决方案1】:

    好的,通过tracemem(buffer, size) 呼叫完成。

    【讨论】:

    【解决方案2】:

    tracemem(address, size_t nbytes, size_t dbytes),其中 nbytes 是一个常数,dbytes 可以是动态的并且小于 nbytes。

    跟踪内存

    void tracemem(address, size_t nbytes)
    void tracemem(address, size_t nbytes, size_t dbytes)
    

    tracemem 操作将 D 表达式作为其第一个参数, 地址和一个常量作为它的第二个参数,nbytes。追踪记忆 将内存从 addr 指定的地址复制到定向的 nbytes 指定长度的缓冲区。

    如果提供了第三个参数 dbytes,则最多只能提供 dbytes 复制。 dbytes 允许为可变数量,但必须小于 大于或等于 nbytes。这在您查看时很有用 具有已知上限但实际字节数的东西 可能会有所不同。例如,考虑您正在倾销一个 以太网数据包。最大大小基于 MTU,但 给定数据包中的数据量是可变的。

    【讨论】:

      猜你喜欢
      • 2019-05-24
      • 2013-05-20
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      相关资源
      最近更新 更多