Ich habe ein Systemtap-Skript geschrieben, um ein C++ - Programm zu profilieren. Im Systemtap-Skript möchte ich ein Klassenmitglied extrahieren. Hiersystemtap Benutzer Zeichenfolge kopieren Fehler
ist die C++ Klassendefinition:
class CFldOrder
{
public:
ByteArray cust_no;
};
class ByteArray
{
public:
const char* get_value(){return buf;}
private:
char* buf[255];
};
Hier ist der Code-Schnipsel des systemtap Skript:
probe process("/trade/ans_bu").statement("*@entrust.cpp:6614")
{
g_custno = @cast(FldOrder, "CFldOrder")->cust_no->buf
}
Wenn das Skript ausgeführt wird, ist es bei dieser Sonde ausgefallen ist und die „user Fehler beim Kopieren der Zeichenfolge bei Adresse 0x0000075 ". Ich denke es bedeutet "@cast (FldOrder," CFldOrder ") -> cust_no-> buf" ist keine gültige Adresse.
Wenn ich dieses Programm mit gdb debuggen und an der Position "trust.cpp: 6614" brechen, wird FldOrder.cust_no.buf korrekt angezeigt.
Wie kann ich das Skript reparieren?