我正在研究使用多进程技术的复杂代码。 我有1个模拟过程和3个子过程。
代码编译没有错误,软件通常运行正常并给出好的结果。在某些情况下,通常在长时间模拟运行中,其中一个子进程发送sigchld并终止该程序。
有没有办法强制子进程打印错误之前调用的最后一个函数的名称?
有没有办法强制子进程打印错误之前使用的最后一行的行号?
我在Ubuntu下使用eclipse 3.8.1,代码是常规C。
答案 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()
。)