Трассировка доступа для записи к экземпляру класса / диапазон памяти в gdb

Здесь:

        jdata = []  # create a list
        for n in response:                
            #convert byte string to string
            jdata.append({n.decode("utf-8")})  # to get rid of "b" prefix 

Вы создаете список наборов. Это должно быть:

        jdata = []  # create a list
        for n in response:                
            #convert byte string to string
            jdata.append(n.decode("utf-8")) 

или более просто:

       jdata = [n.decode("utf-8") for n in response]

также, целью bytes.decode(encoding) является не «избавление от префикса b», а построить Unicode-строку из байтовой строки

6
задан raimue 17 February 2009 в 19:25
поделиться

2 ответа

Можно поместить контрольную точку:

watch x

Это повредится когда x изменяется. x может быть любой тип переменной. Если Вы имеете:

class A;
A x;

Затем gdb повредится каждый раз, когда x изменяется.

Можно на самом деле поместить контрольную точку на любое выражение, и gdb повредится, когда выражение изменится. Будьте осторожны с этим, тем не менее, потому что, если выражение не что-то, что поддерживает используемое оборудование, gdb должен будет оценить это после каждой инструкции, которая приводит к ужасной производительности. Например, если A выше класс со многими участниками затем gdb, может наблюдать весь экземпляр x, но способ, которым это будет работать:

  • выполните инструкцию
  • перейдите к точке останова отладки
  • проверьте если x изменился
  • возвратитесь к программе

Естественно, это очень медленно. Если x int затем gdb может использовать аппаратную точку останова.

Если у Вас есть определенный адрес памяти, можно наблюдать его также:

watch *0x1234

Это повредится, когда содержание [0x1234] изменится.

Можно также установить использование точки останова чтения rwatch, или awatch установить точку останова чтения-записи.

8
ответ дан 9 December 2019 в 22:40
поделиться

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

3
ответ дан 9 December 2019 в 22:40
поделиться
Другие вопросы по тегам:

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