在docker容器上通过FFI调用C方法时出现分段错误

问题描述

我正在尝试将此代码https://github.com/Dynatrace/OneAgent-SDK-Ruby-Sample-Binding/blob/master/oneagentsdk_demo.rb用作监视ruby应用程序的一部分。问题是,在我计算机上的示例应用程序上,我无法使其正常运行,但是当我使用我们要监视的在docker ubuntu映像中运行的应用程序时,我遇到了段错误

stub_version: 1.5.1
initializing OneAgentSdk
> onesdk_initialize returned 0 --> OnesDK_SUCCESS
> onesdk_agent_get_current_state  = 0 (OnesDK_AGENT_STATE_ACTIVE)
> onesdk_agent_get_version_string = '1.197.133.20200723-114512'
[120] Puma starting in cluster mode...
[120] * Version 3.8.2 (ruby 2.5.8-p224),codename: Sassy Salamander
[120] * Min threads: 0,max threads: 16
[120] * Environment: production
[120] * Process workers: 4
[120] * preloading application
[120] * Listening on tcp://0.0.0.0:9293
[120] Use Ctrl-C to stop
[120] - Worker 0 (pid: 238) booted,phase: 0
[120] - Worker 3 (pid: 250) booted,phase: 0
[120] - Worker 1 (pid: 242) booted,phase: 0
[120] - Worker 2 (pid: 244) booted,phase: 0
/app/lib/one-agent/oneagentsdk.rb:175: [BUG] Segmentation fault at 0x0000000000000000
ruby 2.5.8p224 (2020-03-31 revision 67882) [x86_64-linux-gnu]

对于那些不知道OneAgent是什么的人,它是Dynatrace监视解决方案的一部分。因此,生产者不支持这种红宝石绑定,因此我无法从他们这方面获得任何额外的反馈。但是我不认为这是与绑定本身有关的问题。

通常在这里发生的事情是执行此C方法:onesdk_webapplicationinfo_create_p。它不接受字符串,我们需要指针。在 oneagentsdk.rb中有一些方法正在检查字符串是ASCII还是UTF8,它们正在构建此指针。我检查了所有这些元素都不为零,因此通常我应该将适当的值传递给此方法

我正在将此脚本作为中间件进行调用,因为我要在此绑定内传递来自请求的一些信息(uri,响应时间,http方法,http响应代码)以进行请求跟踪。我已经在相同的Ruby版本上的环境中运行了示例应用程序,并且一切正常,但是我从泊坞窗中运行的客户端获得的应用程序无法正常工作。我以为字符串编码可能会出现问题,从而导致额外的字节,但是字节数组的大小具有适当的长度,并且一切似乎都很好。我不是红宝石专家,但是也许有些人会对我可以检查的内容有更多的想法? :)

亲切的问候, 塞巴斯蒂安

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)