多进程失败 - 查找正在使用的最后一个函数

时间:2015-08-11 12:23:41

标签: c debugging eclipse-cdt child-process

我正在研究使用多进程技术的复杂代码。 我有1个模拟过程和3个子过程。

代码编译没有错误,软件通常运行正常并给出好的结果。在某些情况下,通常在长时间模拟运行中,其中一个子进程发送sigchld并终止该程序。

有没有办法强制子进程打印错误之前调用的最后一个函数的名称?

有没有办法强制子进程打印错误之前使用的最后一行的行号?

我在Ubuntu下使用eclipse 3.8.1,代码是常规C。

1 个答案:

答案 0 :(得分:0)

我不知道你是否可以做你想要的,但我建议使用宏来添加调试语句,如:

#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()。)