我正在尝试调试Gammu,一个"手机的库和命令行实用程序",它在与调制解调器正常通信时"超时"。
gammu identify
-> No response in specified timeout. Probably phone not connected.
查看它产生的额外调试信息,出于某种原因,它没有"识别"调制解调器给出的响应(假设它在通过手动串行终端拨打AT命令时具有正确的响应)。
但是,我的问题主要是关于在 strace 下运行 SAME 程序,它没有问题,也不会超时。
strace -e trace=open,close,read,write gammu identify
->(有关调制解调器的一大堆信息)
strace 正在做什么/会做什么会导致这种行为差异?跟踪如何影响其子进程?
(运行在 Ubuntu 18.04, Gammu 1.39.0)
我在不同的平台上看到了这种行为。 有时代码在调试中成功运行。 这意味着由于调试所有代码的工作速度较慢,并且由于该用户不会超时。 示例
makeSomeCallToServerOrPhone();
if(noResponseIn(5))
throw new TimeOutException();
如果没有来自服务器的响应,应用程序将在 5 毫秒内引发异常。 在调试中,这将起作用,因为当您逐步运行代码时。 服务器将及时响应,一切都会正常工作。 但是在正常运行中,5毫秒非常小,服务器或电话可能无法及时响应,您会收到异常。
Strace 还运行程序,如调试和更慢的控制。 正因为如此,伽姆看起来可以工作。 也许你可以给 Gammu 配置和更改超时检查 https://wammu.eu/docs/manual/smsd/config.html