我寫了一個systemtap腳本來剖析C++程序。在systemtap腳本中,我想提取一個類成員。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顯示正確。
我該如何修復腳本?