【问题标题】:How to interpret the strace output如何解释 strace 输出
【发布时间】:2015-02-24 12:53:15
【问题描述】:

当我在嵌入式 Linux 上执行以下程序时,没有任何反应:

#include <boost/thread/thread.hpp>
#include <boost/lockfree/spsc_queue.hpp>
#include <iostream>

#include <boost/atomic.hpp>

void Test(void)
{
    std::cout << "Hello World" << std::endl;
}

int main(int argc, char* argv[])
{
    std::cout << "init";

    boost::thread producer_thread(Test);

    producer_thread.join();

    std::cout << "end";
}


# ./prog -> nothing happens here

strace 输出的最后几行是:

open("/lib/libboost_thread.so.1.55.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\240\272\0\0004\0\0\0"..., 512) = 512
lseek(3, 95536, SEEK_SET)               = 95536
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1200) = 1200
lseek(3, 95226, SEEK_SET)               = 95226
read(3, "A'\0\0\0aeabi\0\1\35\0\0\0\0055T\0\6\3\10\1\t\1\22\4\24\1\25\1"..., 40) = 40
exit_group(1)                           = ?
+++ exited with 1 +++
# 

交叉编译的 libbost_thread 正确安装在 /lib 处。

在调用 main() 之前程序退出。程序在我的Ubuntu下运行正常。

目标:带有 buildroot 的 ARM (sama5d3)

工具链:arm-linux-gnueabihf-

问候

【问题讨论】:

  • 哇。这被赞成了? 在程序中是什么?!?我的意思是,您所展示的只是它确实正确加载了 boost_thread 共享库,然后它退出了。你会而不是期待什么?为什么?
  • 嗨,程序应该创建一个线程并打印一个“Hello World”。程序在 main() 被调用之前退出。
  • 您需要向我们展示如何您做到了。在这一点上,任何人的最佳猜测都是 PEBCAK(见 Select Isn't Broken
  • 嗨,我想现在解释得更好了。最好的问候

标签: c++ boost strace


【解决方案1】:

strace 是一个跟踪系统调用的工具。在您的示例中,这包括对open()lseek()read() 的调用。具体来说,您粘贴的 sn-p 显示操作系统的动态库加载器打开 libboost_thread.so.1.55.0 文件并读取其内容;而已。除了链接到那个库之外,它并没有真正展示任何关于您的程序的内容。

【讨论】:

  • 我发布了代码。知道为什么它在 main() 被调用之前就退出了吗?
  • 没有什么明显的问题。尝试在调试器下运行它。
【解决方案2】:

也许是一个提示:

您是否使用编译和链接选项 -pthread 为您的目标链接到 libpthread?

如果不是,它会产生与在您的环境中看到的相同的效果:prog 启动,尝试启动一个新线程,未启用线程并调用 abort() 函数。因为 abort() 只是让程序在退出代码中出现错误,不会发生其他任何事情。

您能否也添加您的编译和链接命令以用于调试目的!

另外:

没有endl 的输出将不会被打印,因为 cout 已缓冲。仅当您调用flush 或发送endl 时才会打印缓冲区。也许你在你的例子中改变了这一点。

希望对您有所帮助...

【讨论】:

    【解决方案3】:

    我发现了问题。

    boost 库使用 arm-linux-gnueabi- (elibc) 编译,buildroot 使用 uClibc 编译。

    【讨论】:

      猜你喜欢
      • 2011-09-14
      • 2023-03-18
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 2015-11-11
      • 2016-08-18
      相关资源
      最近更新 更多