Было бы полезно добавить дополнительную информацию для трассировки стека? - PullRequest
1 голос
/ 19 сентября 2008

Было бы полезно иметь возможность отмечать объекты, где значение ofString.valueOf () будет включено в любую трассировку стека. В моем примере ниже я использовал «след». Переменные, которые не объявлены в точке трассировки стека, просто будут включены. Это значительно упростит отладку и упростит написание программ, которые легко отлаживать.

Пример трассировки стека для кода ниже:

java.lang.NullPointerException:
    at Test.main(Test.java:7) index=0, sum=3, obj=null


public class Test {
  Object obj;
  public void main(String[] args) trace obj {
    trace int sum = 0;
    for(trace int index = 0; index < args.length; index++) {
      sum += Integer.parseInt(args[index]);
      sum += obj.hashCode();//Will cause NullPointerException
    }
  }
}

От: http://jamesjava.blogspot.com/2005/04/extra-info-in-stack-traces.html

Ответы [ 8 ]

1 голос
/ 22 июня 2009

Я бы предпочел стандартный (основанный на аннотациях) способ описания намерений программистов обнуления (FindBugs, JSR 305). Однажды я подумал о том, чтобы иметь не только номер строки, но и номер столбца, включенного в сообщение об исключении, чтобы при длинных цепочечных вызовах вы могли легче увидеть, какой оператор точки вызвал NPE. Как указано другими в вопросах, связанных с NPE, здесь, в StackOverflow, в большинстве случаев вы получаете NPE от попыток получить доступ к полю / методу для нулевого объекта.

1 голос
/ 19 сентября 2008

Заманчиво, но я не думаю, что эта функция гарантирует новое ключевое слово в Java (и это намного сложнее в языке).

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

1 голос
/ 22 июня 2009

Возможно, я упускаю суть, но почему бы не использовать правильную структуру ведения журналов (например, Log4j)? Затем вы можете использовать вложенные / отображенные диагностические контексты ( NDC / MDC ) для вывода значений переменных.

1 голос
/ 19 сентября 2008

это может быть полезно, но я думаю, что это загромождает код - вероятно, когда код работает, вы захотите удалить ключевые слова 'trace'; возможно, какая-то форма метаданных была бы более подходящей

тогда всегда есть операторы печати ...

0 голосов
/ 19 сентября 2008

Э. Лично я не думаю, что это было бы так полезно. Если я запускаю свой код и запускаю исключения, я могу легче установить точку останова и войти в код и посмотреть, что все переменные находятся в этой точке, и выяснить, где это происходит на самом деле.

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

0 голосов
/ 19 сентября 2008

Окно стека вызовов отладчика Visual Studio C # содержит трассировку стека со всеми отображаемыми значениями аргументов.

0 голосов
/ 19 сентября 2008

То, что я хотел бы, это свойство исключения, которое будет представлять собой строковый массив всех сигнатур методов, ведущих к броску ... без необходимости разбирать его из текста исключения.

0 голосов
/ 19 сентября 2008

Да, это может быть весьма полезно. Я часто делаю подобные вещи сам, но обычно я компилирую их в непроизводственный код

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