通过使用 call 命令或通过输出包含调用的表达式来在要调试的进程中进行调用时,可能会导致不明显的严重中断。以下是一些要密切注意的情况以及摆脱这些情况的方法。
调用可能会陷入无限循环(您可以中断该循环),或导致段故障。在许多情况下,您可以使用 pop -c 命令返回到调用方。
在多线程应用程序中进行调用时,将会恢复所有线程以避免死锁,所以您可能会在进行调用的线程之外的其他线程上看到负面影响。
断点条件中使用的调用可能会搞乱事件管理(请参见恢复执行)。
dbx 进行的一些调用会“安全地”执行。如果遇到问题(一般是段故障)而非通常的 "Stopped with call to ...",则 dbx 会:
忽略任何 stop 命令(包括那些因检测内存访问错误而使用的命令)
自动发出 pop -c 命令以返回到调用方
继续执行
对于下面的调用,dbx 所使用的是安全调用:
由 display 命令输出的表达式中发生的调用。失败的调用显示为: ic0->get _data() = <call failed>
要诊断此类故障,请尝试使用 print 命令输出表达式。
对 db_pretty_print() 函数的调用(使用 print -p 命令时除外)。
事件条件表达式中使用的调用。包含失败调用的条件会计算为 false。
执行 pop 命令期间为调用析构函数所做的调用。
所有内部调用。