strace - Gammu 在 strace 下运行时有不同的行为
问题描述
我正在尝试调试 Gammu,这是一个“用于手机的库和命令行实用程序”,它在与调制解调器正常通信时“超时”。
gammu identify
->No response in specified timeout. Probably phone not connected.
查看它产生的额外调试信息,出于某种原因,它没有“识别”调制解调器正在给出的响应(假设它在通过手动串行终端拨打 AT 命令时具有正确的响应)。
但是,我的问题主要是关于在 strace 下运行 SAME PROGRAM,它没有问题,也不会超时。
strace -e trace=open,close,read,write gammu identify
->(关于调制解调器的一大堆信息)
strace 会/会做什么会导致这种行为差异?strace 如何影响其子进程?
(在 Ubuntu 18.04、Gammu 1.39.0 上运行)
解决方案
我在不同的平台上看到过这种行为。有时代码在调试中成功运行。这意味着由于调试所有代码的工作速度较慢,并且因为该用户没有超时。例子
makeSomeCallToServerOrPhone();
if(noResponseIn(5))
throw new TimeOutException();
如果服务器没有响应,应用程序将在 5 毫秒内抛出异常。在调试中,这将起作用,因为当您逐步运行代码时。服务器将及时响应,一切都会正常工作。但在正常运行中,这 5 毫秒非常小,服务器或电话可能无法及时响应,您会收到异常。
strace 还运行程序更受控制,如调试和更慢。因为那个 gammu 看起来像是在工作。也许你可以给 gammu 配置和更改超时检查https://wammu.eu/docs/manual/smsd/config.html
推荐阅读
- node.js - 在 Docker 中构建时出现 node-sass 错误
- node.js - 如何将nodejs windows服务设置为高优先级
- javascript - Angular 6将价值从一项服务传递到另一项服务?
- javascript - 需要单个代码来处理多个输入
- r - R中的robustbase包中的nlrob函数如何计算参数估计的标准误差?
- c# - 机器人在测试中抛出 502 Bad Gateway
- spring - 如何从测试 App 上下文中排除 Spring Boot 应用程序 bean?
- swift - 如何在 Swift String 中写入所有 ASCII 字符
- nginx - 更准确的nginx位置匹配
- wix - 在 wix 安装程序错误消息中添加超链接