簡體   English   中英

如何解釋strace輸出

[英]How to interpret the strace output

在嵌入式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-

問候

strace是跟蹤系統調用的工具。 在您的示例中,這包括對open()lseek()read() lseek() 具體來說,您粘貼的代碼片段顯示了OS的動態庫加載器,打開了libboost_thread.so.1.55.0文件並讀取其內容。 而已。 除了與該庫鏈接之外,它實際上沒有演示任何有關您程序的內容。

可能提示:

您是否已使用目標的編譯和鏈接選項-pthread與libpthread鏈接?

如果不是,則其效果可能與您在環境中看到的效果相同:編啟動,嘗試啟動新線程,未啟用任何線程,然后調用abort()函數。 因為abort()只會使編步在退出代碼中出錯,否則不會發生其他情況。

您是否還可以添加用於編譯目的的編譯和鏈接命令!

此外:

不帶endl輸出將不會被打印,因為cout已緩沖。 僅當您調用flush或發送endl才會打印緩沖區。 也許您在示例中對此進行了更改。

希望有幫助...

我發現了問題。

boost庫是用arm-linux-gnueabi-(elibc)編譯的,而buildroot是用uClibc編譯的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM