LINUX.ORG.RU

C/C++. Устройство дебаггеров.


0

4

Каким образом dbg/visual studio умудряются отображать значение строки, когда наводишь курсор на переменную типа char*? Откуда им знать, какая там длина - вдруг у меня по этому адресу лежит 1024 символа «A», а потом сразу граница выделенного куска памяти. Как дебаггер определяет, где остановиться?

Каким образом dbg/visual studio умудряются отображать значение строки, когда наводишь курсор на переменную типа char*?

В Си строка должна завершаться символом '\0', по нему и определяют.

Т.е. если у тебя есть строка «hello», то в памяти будет 'h','e','l','l','o','\0'.

Norgat ★★★★★
()
Ответ на: комментарий от Nao

«Почему тупая школота создаёт здесь дебильные темы?»

anonymous
()

Как дебаггер определяет, где остановиться?

пойдет дальше до первого нуля. все это посчитает строкой.

anonymous
()
Ответ на: комментарий от Nao

Вопрос в том, почему он не падает нах по сегфолту, если на пути к нулю встречается конец выделенного региона памяти. У меня есть догадки, но от лишнего тупого вопроса моя жизнь не сильно хуже станет )

kiverattes ★☆
() автор топика
Ответ на: комментарий от i-rinat

Плюс в отладчике с хорошей вероятностью стоит ограничение на длину строки. То есть, если у тебя там 1024 буквы «А», то он просто не станет читать их целиком.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

Кстати, я попробовал в char*, для которого выделено 10 байт, записать 20 символов и посмотреть в gdb. gdb вывел их все. Так что он ищет \0.

Плюс в отладчике с хорошей вероятностью стоит ограничение на длину строки

Ага

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
   char *buf = malloc(4096);
   memset(buf, 'A', 4096);
   printf("hello\n");
}
(gdb) info locals
buf = 0x601010 'A' <repeats 200 times>...
i-rinat ★★★★★
()

Помимо того что тут написали можно добавить что дебаггер также читает дебаг инфо

vasily_pupkin ★★★★★
()

а так же в ряде случаев может прелоадить свои враперы над стандартными функциями...

Jetty ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.