首页 > 解决方案 > 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 上运行)

标签: stracegammu

解决方案


我在不同的平台上看到过这种行为。有时代码在调试中成功运行。这意味着由于调试所有代码的工作速度较慢,并且因为该用户没有超时。例子

makeSomeCallToServerOrPhone();
if(noResponseIn(5))
  throw new TimeOutException();

如果服务器没有响应,应用程序将在 5 毫秒内抛出异常。在调试中,这将起作用,因为当您逐步运行代码时。服务器将及时响应,一切都会正常工作。但在正常运行中,这 5 毫秒非常小,服务器或电话可能无法及时响应,您会收到异常。

strace 还运行程序更受控制,如调试和更慢。因为那个 gammu 看起来像是在工作。也许你可以给 gammu 配置和更改超时检查https://wammu.eu/docs/manual/smsd/config.html


推荐阅读