首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >systemtap用户字符串复制错误

systemtap用户字符串复制错误
EN

Stack Overflow用户
提问于 2016-11-22 22:02:28
回答 1查看 289关注 0票数 0

我已经编写了一个systemtap脚本来分析C++程序。在systemtap脚本中,我想提取一个类成员。

下面是c++类的定义:

代码语言:javascript
复制
class CFldOrder
{
public:
    ByteArray cust_no;
};

class ByteArray
{
public:
    const char* get_value(){return buf;}
private:
    char* buf[255];
};

以下是系统分流脚本的代码片段:

代码语言:javascript
复制
probe process("/trade/ans_bu").statement("*@entrust.cpp:6614")
{
    g_custno = @cast(FldOrder, "CFldOrder")->cust_no->buf
}

当脚本运行时,它在这个探测上失败,并显示"user string copy fault addr 0x0000075“。我猜这意味着"@cast(FldOrder,"CFldOrder")->cust_no->buf“不是一个有效的地址。

如果我用gdb调试这个程序,并在"entrust.cpp:6614“位置中断,FldOrder.cust_no.buf可以正确显示。

我如何修复这个脚本?

EN

回答 1

Stack Overflow用户

发布于 2016-11-23 23:18:50

问题可能是您的标识符FldOlder只是一个脚本变量,stap会将其解释为初始化值为零的整数。@cast表达式隐藏了指针算法以获取0x00000075地址-如果输出& ((CFldOlder*)0)->cust_no->buf,您将在C++中获得该地址。

要修复脚本,请向@cast传递一个有效的指针。您可能指的是上下文变量$FldOlder。如果变量的类型已经是CFldOlder*,那么您甚至可能不需要@cast (其工作方式类似于C++ reinterpret_cast<>)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40743898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档