我该如何使用strace来搜索串口?
我正在linux中编写一个应用程序,需要访问串口. 我环顾四周,发现我可以使用strace来做到这一点.所以我尝试了以下方法: -I打印我使用的串行设备的file_descriptor. (重新启动我的应用程序几次后,我向自己保证,我的应用程序从内核获取的file_descriptor数字是“4” – 如果我以strace -e write = 4./ myapp启动我的应用程序,我希望在终端中获取消息,仅来自file_descriptor“4”.相反,我得到输出的looots:
来自几个不同的file_descriptors. 如果我用strace -e trace = write -e write = 4 ./myapp运行我的应用程序 我会得到更少的消息,即使它们仍然很多,或者file_descriptor“1”.
你在上面看到的是一些printf语句. 谢谢您的帮助. 最佳答案
尝试一下简单.
这将写入所有系统调用,除此之外,写入fd 1的数据.
除了程序本身的输出外,这不会产生任何输出.如果你想查看它的数据,你似乎必须跟踪写入.
这将打印所有写入系统调用,用于任何文件描述符.除此之外,它将打印发送到描述符1的数据的转储.输出将如下所示:
系统调用从第一行开始.在参数列表之后,实际执行了系统调用,并打印foo后跟换行符.然后通过strace打印系统调用返回值.之后,我们有数据转储. 我建议使用-e trace = write -e write = 4 -o write4.txt,然后使用grep’^ |’ write4.txt或类似的东西.如果您想实时查看数据,可以使用这样的bash重定向:
这将从strace发送输出到grep,您可以在其中剥离写入系统调用并专注于数据转储.
我会说这行不是来自strace,而是来自某些应用程序.这就是它没有被包裹的原因.事实上,除了那个未被解包的版本之外,没有包装版本的这个(就像我上面的foo示例输出中所示)表明输出可能源自myapp放置的子进程.也许您想添加-f以便您遵循子进程创建? 请注意,孩子可能决定重命名其文件描述符,例如将其标准输出重定向到父级打开的串行端口.如果发生这种情况,write = 4将不再适用.为了安全起见,我将整个-f -e trace = write输出写入文件,并查看它以查看数据实际写入的位置.然后根据该数据调整内容. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |