通过使用 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 命令期间为调用析构函数所做的调用。
所有内部调用。