В pdb, как Вы сбрасываете список (l) количество командной строки?

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

В использовании иерархии классов или иерархии классов там несколько вопросов, которые необходимо рассмотреть:

  1. И конструктор копии и деструктор объекта исключения никогда не должны выдавать исключение. Если они делают Вы - программа, сразу завершится. (ISO 15.5/1)

  2. , Если Ваши объекты исключения имеют базовые классы, то используйте общедоступное наследование.
    обработчик А будет только выбран для полученного к базовому классу, если базовый класс будет доступен . (ISO 15.3/3)

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

, Например:

class Ex {
public:
  Ex(int i) 
  : m_i (i)
  {
    if (i > 10) {
      throw "Exception value out of range";
    }
  }

  int m_i;
};


void foo (bool b) {
  if (! b) {
     // 'b' is false this is bad - throw an exception
     throw Ex(20);    // Ooops - throw's a string, not an Ex
  }
}
32
задан Martijn Pieters 30 March 2015 в 10:31
поделиться

3 ответа

Вы можете пропатчить его для желаемого поведения. Например, вот полный сценарий, который добавляет команду «reset_list» или «rl» в pdb:

import pdb

def Pdb_reset_list(self, arg):
    self.lineno = None
    print >>self.stdout, "Reset list position."
pdb.Pdb.do_reset = Pdb_reset_list
pdb.Pdb.do_rl = Pdb_reset_list

a = 1
b = 2

pdb.set_trace()

print a, b

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

редактировать: А вот такой патч:

import pdb
Pdb = pdb.Pdb

Pdb._do_list = Pdb.do_list
def pdb_list_wrapper(self, arg):
    if arg.strip().lower() in ('r', 'reset', 'c', 'current'):
        self.lineno = None
        arg = ''
    self._do_list(arg)
Pdb.do_list = Pdb.do_l = pdb_list_wrapper

a = 1
b = 2

pdb.set_trace()

print a, b
4
ответ дан 27 November 2019 в 21:03
поделиться

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

На самом деле нужен синтаксис, означающий «Перечислить строки рядом с текущим указателем выполнения».

5
ответ дан 27 November 2019 в 21:03
поделиться

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

#define USER_JACK 1
#define USER_QUEEN 2

#define USER USER_JACK 

#if USER == USER_JACK
#define USER_VS USER_QUEEN
#elif USER == USER_QUEEN
#define USER_VS USER_JACK
#endif

Или вы могли бы немного переформатировать код и использовать код Си вместо него.

-121--838436-

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

git clone git@github.com:whatever .

The «». в конце указывает текущую папку в качестве папки извлечения.

-121--1896281-

Если вместо pdb используется epdb , можно использовать «l» для перехода вперед, как в pdb, но затем «l». возвращается к текущему номеру строки, а «l-» проходит обратно через файл. Можно также использовать до # для продолжения до заданной строки. Epdb предлагает кучу других симпатий тоже. Требуется удаленная отладка? Попробуйте serve () вместо набор _ trace () , а затем telnet в (порт 8080 является портом по умолчанию).

import epdb
epdb.serve()
6
ответ дан 27 November 2019 в 21:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: