【发布时间】:2016-11-23 23:18:49
【问题描述】:
我编写了一个 systemtap 脚本来分析 C++ 程序。在 systemtap 脚本中,我想提取一个类成员。
这里是c++类的定义:
class CFldOrder
{
public:
ByteArray cust_no;
};
class ByteArray
{
public:
const char* get_value(){return buf;}
private:
char* buf[255];
};
这里是systemtap脚本的代码sn-p:
probe process("/trade/ans_bu").statement("*@entrust.cpp:6614")
{
g_custno = @cast(FldOrder, "CFldOrder")->cust_no->buf
}
当脚本运行时,它在此探测中失败并说“地址 0x0000075 处的用户字符串复制错误”。我猜这意味着“@cast(FldOrder, "CFldOrder")->cust_no->buf" 不是有效地址。
如果我用 gdb 调试这个程序并在 "entrust.cpp:6614" 位置中断,FldOrder.cust_no.buf 会正确显示。
如何修复脚本?
【问题讨论】:
标签: systemtap