C++ 프로그램을 프로파일 링하기위한 systemtap 스크립트를 작성했습니다. systemtap 스크립트에서 클래스 멤버를 추출하려고합니다.systemtap 사용자 문자열 복사 오류
스크립트가 실행probe process("/trade/ans_bu").statement("*@entrust.cpp:6614")
{
g_custno = @cast(FldOrder, "CFldOrder")->cust_no->buf
}
, 그것은이 프로브에 실패했다 "사용자 : 여기
class CFldOrder
{
public:
ByteArray cust_no;
};
class ByteArray
{
public:
const char* get_value(){return buf;}
private:
char* buf[255];
};
이 SystemTap의 스크립트의 코드입니다 : 여기
는 C++ 클래스 정의입니다 문자열 복사 오류 (addr 0x0000075 "). 나는 그것이 "@cast (FldOrder,"CFldOrder ") -> cust_no-> buf"가 유효한 주소가 아님을 의미합니다.
이 프로그램을 gdb로 디버그하고 "entrust.cpp : 6614"위치에서 중단하면 FldOrder.cust_no.buf가 올바르게 표시됩니다.
스크립트를 어떻게 수정합니까?