Как я могу использовать “часы” GDB?

Вам нужно вызвать метод AddPage до того, как вы начнете WriteHtml

Хорошее место, вероятно, будет сразу после SetFont

$obj_pdf->SetFont('helvetica', '', 12);
$obj_pdf->AddPage();
8
задан Léo Léopold Hertz 준영 7 May 2009 в 16:38
поделиться

3 ответа

Это может помочь указать вашу платформу, версию GDB и точную последовательность команд GDB, которые вы использовали.

Вот что я вижу (похоже, GDB работает нормально):

$ gcc -g test.c

$ gdb a.out
GNU gdb (GDB) 6.8.50.20090430-cvs
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-unknown-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
(gdb) list
1       #include <stdio.h>
2       #include <stdlib.h>
3
4       int main(int argc, char** argv){
5         printf("Hello world\n");
6
7         int a = 12;
8         a = 10;                                                                                                                                                                      
9         return 0; 
10      }
11
(gdb) b 5
Breakpoint 1 at 0x4004a7: file test.c, line 5.
(gdb) r

Breakpoint 1, main (argc=1, argv=0x7fffffffdb28) at test.c:5
5         printf("Hello world\n");
(gdb) watch a
Hardware watchpoint 2: a
(gdb) c
Hello world
Hardware watchpoint 2: a

Old value = 0
New value = 12
main (argc=1, argv=0x7fffffffdb28) at test.c:8
8         a = 10;                                                                                                                                                                      
(gdb) c
Hardware watchpoint 2: a

Old value = 12
New value = 10
main (argc=1, argv=0x7fffffffdb28) at test.c:9
9         return 0; 
(gdb) c

Watchpoint 2 deleted because the program has left the block in
which its expression is valid.
0x00007ffff7ab3033 in exit () from /lib/libc.so.6
(gdb) c

Program exited normally.
(gdb) q
11
ответ дан 5 December 2019 в 11:26
поделиться

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

1
ответ дан 5 December 2019 в 11:26
поделиться

Если вы хотите отлаживать программу, вы всегда должны строить с -O0 -g3 (я беру что вы используете gcc, если вы не ваш компилятор, вероятно, будет поддерживать другие флаги, чтобы отключить оптимизацию и включить отладочную информацию).

В моей системе (x86_64 с Gentoo GNU / Linux) я не могу получить 'int a = 12 ', когда я использую любую оптимизацию, большую или равную -O, поскольку компилятор затем применит исключение мертвого кода . (Взято из здесь , это флаг -fdce в разделе -O)

Всегда помните об этом при отладке! Проверьте свой код, либо дизассемблировав его с помощью objdump -D, либо попросив компилятор показать вам сгенерированную сборку (в gcc с флагом -S)

3
ответ дан 5 December 2019 в 11:26
поделиться
Другие вопросы по тегам:

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