справка с трассировками gdb (или подобный)

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

6
задан tvaughan 25 August 2009 в 19:01
поделиться

2 ответа

Во-первых, вам нужно убедиться, что ваша программа скомпилирована с отладочными символами и, возможно, без оптимизации, чтобы сделать gdb наиболее полезным. Для gcc это будет -g -O0 .

Во-вторых, функция, которую вы ищете, не отслеживает, а ее точки наблюдения.

(gdb) help watch
Set a watchpoint for an expression.
A watchpoint stops execution of your program whenever the value of
an expression changes.

Итак, приведем пример кода:

int main() {
    int a;
    a = 1;
    a = 2;
    return 0;
}

затем вы можете запустить на нем gdb, и:

(gdb) b main
Breakpoint 1 at 0x80483a5: file test.c, line 4.
(gdb) run
Starting program: /tmp/test 

Breakpoint 1, main () at test.c:4
4               a = 1;
(gdb) watch a
Hardware watchpoint 2: a
(gdb) c
Continuing.
Hardware watchpoint 2: a

Old value = -1207552288
New value = 2
main () at test.c:8
8               return 0;

он работает немного странно из-за того, что он находится в стеке, а не в памяти. А если бы оптимизация была включена, она бы работала еще меньше: была бы оптимизирована.

6
ответ дан 10 December 2019 в 00:41
поделиться

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

вы используете команду "commands"

(gdb) help commands
Set commands to be executed when a breakpoint is hit.
Give breakpoint number as argument after "commands".
With no argument, the targeted breakpoint is the last one set.
The commands themselves follow starting on the next line.
Type a line containing "end" to indicate the end of them.
Give "silent" as the first line to make the breakpoint silent;
then no output is printed when it is hit, except what the commands print.

Итак, найдите номер точки наблюдения из команды watch и сделайте это (при условии, что ваши часы - это второй перерыв)

(gdp) commands 2
> print a
> cont
> end

Предполагая, что a - это переменная, которую вы хотите. Вы можете опустить строку печати, если вас все равно устраивает вывод, который дает вам gdb.

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

и сделайте это (при условии, что ваши часы - это вторая пауза)

(gdp) commands 2
> print a
> cont
> end

Предполагая, что a - это переменная, которую вы хотите. Вы можете опустить строку печати, если вас все равно устраивает вывод, который дает вам gdb.

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

и сделайте это (при условии, что ваши часы - это вторая пауза)

(gdp) commands 2
> print a
> cont
> end

Предполагая, что a - это переменная, которую вы хотите. Вы можете опустить строку печати, если вас все равно устраивает вывод, который дает вам gdb.

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

3
ответ дан 10 December 2019 в 00:41
поделиться
Другие вопросы по тегам:

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