如何找到错误的位置

时间:2010-05-07 05:34:23

标签: c

如何找到错误发生的位置? 在C语言中,返回值表示发生了什么错误, 例如无法打开文件或内存分配。 没有错误发生的信息。

例如,函数'foo'调用A,B,C,D。 如果foo返回错误值,则可能是A或B或C或D的返回值。 我找不到什么函数返回错误。 我必须运行调试器或添加一些代码来查找哪个函数返回错误。

5 个答案:

答案 0 :(得分:1)

是的,你必须使用调试器或添加额外的代码来显示一些输出。另外,请确保查看所调用函数的前置条件(如果有的话) - 确保在调用之前遵循它的要求。

答案 1 :(得分:1)

我认为你已经回答了你的问题,你需要使用调试器来查找。 也许添加一些断点,看看错误总是或者有时只发生在同一个地方。

答案 2 :(得分:1)

C库函数如fopen()设置errno以提供更多诊断信息。你可以使用类似的策略。但是如果你没有以某种方式编程来获取额外的信息,你就会被调试器困住。

答案 3 :(得分:1)

设计适当的错误处理,提供您需要的信息。然后围绕这个设计编写你的函数。使用返回值只是执行此操作的众多可能之一,但显然不足以满足您的特定要求。

答案 4 :(得分:1)

发生什么错误是它发生的地方的线索:如果A只能返回错误#5,B只返回#42,C只返回#3而D只返回#56,每当foo返回#5时,你知道它来自甲

如果错误代码在不同的函数上重叠,您可以从输入和输出中获得其他线索:如果D显示消息或发出错误#5,则每当foo返回#5并显示消息时,您就会知道错误来自A.

如果错误代码,输入和输出不足以检索错误位置,则必须提高程序的可观察性。一些解决方案是:

  • 添加调试信息并使用调试器
  • 添加您可以随意激活或禁止的日志
  • 选择唯一的错误代码,以便发生的错误识别它发生的位置