Я написал сценарий systemtap для профилирования программы на C++. В сценарии systemtap я хочу извлечь член класса.systemtap user string copy fault
Вот с ++ определение класса:
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
}
Когда сценарий запущен, он потерпел неудачу в этом зонде и сказал: «пользователь ошибка копирования строки в addr 0x0000075 ". Я предполагаю, что это означает, что «@cast (FldOrder,« CFldOrder ») -> cust_no-> buf" не является допустимым адресом.
Если я отлаживаю эту программу с помощью gdb и ломаю в позиции «entrust.cpp: 6614», FldOrder.cust_no.buf отображается правильно.
Как исправить скрипт?