Как найти, где ошибка - PullRequest
1 голос
/ 07 мая 2010

Как я могу найти, где происходит ошибка? В языке Си возвращаемое значение означает, какая ошибка возникает, например, невозможность открыть файл или выделение памяти. Нет информации о месте возникновения ошибки.

Например, функция 'foo' вызывает A, B, C, D. Если foo возвращает значение ошибки, это может быть возвращаемое значение A или B или C или D. Я не могу найти, какая функция возвращает ошибку. Мне нужно запустить отладчик или добавить несколько кодов, чтобы найти, какая функция возвращает ошибку.

Ответы [ 5 ]

1 голос
/ 07 мая 2010

Какая ошибка возникает, это ключ к пониманию того, где она возникает: если A может вернуть только ошибку # 5, B только # 42, C только # 3 и D только # 56, то, когда foo возвращает # 5, вы знаете, что это A.

Если коды ошибок перекрывают разные функции, вы можете получить другие подсказки от ваших входов и выходов: если D либо отображает сообщение, либо выдает ошибку # 5, всякий раз, когда foo возвращает # 5 и сообщение отображается, вы знаете, что ошибка исходит от А.

Если кода ошибки, входных и выходных данных недостаточно для определения местоположения ошибки, вам необходимо повысить наблюдаемость вашей программы. Некоторые решения:

  • добавить отладочную информацию и использовать отладчик
  • добавить журналы, которые вы можете активировать или заблокировать по желанию
  • выберите уникальные коды ошибок, чтобы определить, какая именно ошибка произошла,
1 голос
/ 07 мая 2010

Разработайте подходящую обработку ошибок, которая предоставит необходимую вам информацию. Затем напишите свои функции вокруг этого дизайна. Использование возвращаемых значений - лишь одна из многих возможностей сделать это, но, очевидно, недостаточно для ваших конкретных требований.

1 голос
/ 07 мая 2010

Я думаю, что вы ответили на ваш вопрос, вам нужно использовать отладчик, чтобы узнать. Может быть, добавить некоторую точку останова, посмотреть, если ошибка происходит всегда или только иногда, и в том же месте.

1 голос
/ 07 мая 2010
Функции библиотеки

C, такие как fopen() set errno, предоставляют вам немного больше диагностической информации.Вы можете использовать аналогичную стратегию.Но если вы не программируете каким-либо образом такую ​​дополнительную информацию, вы застряли в отладчике.

1 голос
/ 07 мая 2010

Да, вам придется использовать отладчик или добавить дополнительный код для отображения некоторых выводов. Кроме того, убедитесь, что вы смотрите на предварительные условия для функции, которую вы вызываете (если они есть) - убедитесь, что вы выполняете то, что она требует, прежде чем вызывать ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...