我正在编写一个使用多进程技术的复杂代码。我有1个模拟进程和3个子进程。
代码编译无错误,软件运行正常,效果良好。在某些情况下,通常在长时间的模拟运行中,其中一个子进程发送sigchld并终止程序。
是否有一种方法可以强制子进程打印在错误之前被调用的最后一个函数的名称?
是否有一种方法可以强制子进程打印错误前使用的最后一行的行号?
我在Ubuntu下使用eclipse 3.8.1,代码是常规的c。
我不知道你是否可以做你所要求的,但我建议使用宏添加调试语句,如:
#define DBG_ENABLED 1
#if DBG_ENABLED
#define DBG(...)
do {
printf("%s(%d) %s(): ", __FILE__, __LINE__, __func__);
printf(__VA_ARGS__);
printf("n");
} while (0)
#else
#define DBG(...)
#endif
然后例如:
void YourFunction(int x, int y) {
DBG("x=%d y=%d", x, y);
. . .
DBG("ok");
}
这允许您查看程序正在做什么,并且它应该有助于查明问题的位置。然后,您可以将DBG_ENABLED
设置为0,以从可执行文件中删除调试。
(如果运行长时间的模拟,最好使用fprintf()
而不是printf()
来打印到文件)