我编写了一个 systemtap 脚本来分析 C++ 程序。在 systemtap 脚本中,我想提取一个类成员。
这是c ++类定义:
class CFldOrder
{
public:
ByteArray cust_no;
};
class ByteArray
{
public:
const char* get_value(){return buf;}
private:
char* buf[255];
};
下面是 systemtap 脚本的代码片段:
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 会正确显示。
如何修复脚本?