Sign in Join
Wiki copytemporary

Creating a Backtrace with GDB/ru: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## Причины для создания обратной трассировки
22
33### Отчеты об ошибках
44
55Файлы обратной трассировки могут быть очень полезны при отправке отчетов об ошибках. Они, несомненно, повысят вероятность того, что ошибка будет исправлена раньше.
66
77### Помоги себе найти проблему
88
99Обратная трассировка может действительно облегчить поиск проблемы с вашей собственной программой. Часто проблема выявляется сразу.
1010
1111### Это просто весело!!!
1212
1313Хорошо, это может быть преувеличением, но делать обратную трассировку просто весело!
1414
1515Если серьезно, если вы можете придумать другую причину создания обратной трассировки, добавьте ее сюда.
1616
1717## Создание Backtrace
1818
1919> **Note:** **Mac-пользователям** следует использовать *lldb* вместо *gdb*.
2020
2121Чтобы создать обратную трассировку с помощью [[GDB]] (Gnu DeBugger):
2222
23231. У вас должна быть программа [GDB](http://www.gnu.org/software/gdb/gdb.html). Она доступна на большинстве установленных ОС-*nix. Если вы скачали версию fpc или Lazarus для Windows, GDB уже включен в поставку. В Lazarus он установлен, как отладчик, по умолчанию. Посмотрите в Tools (Сервис) -\> Options (Параметры) -\> Debugger (Отладчик) -\> General Tab (Общие). Путь по умолчанию для GDB в Windows: c:\lazarus\mingw\bin\gdb.exe.
24242. GDB должен быть прописан в переменной окружения PATH. Если это Windows, из командной строки введите (пример): установите PATH =% PATH%; set PATH=%PATH%;c:\lazarus\mingw\bin\\
25253. Программа, которую вы хотите отладить, ДОЛЖНА иметь отладочную информацию, включенную в исполняемый файл. Если вы используете "strip", "upx", компилируете с "Xs" или использовали какой-либо другой exe-упаковщик, это не сработает!
2626
2727------------------------------------------------------------------------
2828
2929Прим.перев.: если вы используете транковые svn-сборки FPC для Windows, то после компиляции gdb.exe в них отсутствует.Его необходимо скопировать (вместе с некоторыми другими утилитами) из папки *\<Stable-FPC RootDir\>\bin\* дистрибутива стабильной версии компилятора (при помощи которой вы и собираете транк FPC, например, на момент перевода статьи это fpc 3.0.4) в папку *\<Trank-FPC RootDir\>/bin/\$(TargetCPU)-\$(TargetOS)/*, где находится fpc.exe.
3030
3131------------------------------------------------------------------------
3232
3333### Очень короткая инструкция
3434
3535Linux терминал:
3636
3737``` bash
3838 $ cd program_folder
3939 $ gdb program_name
4040 run
4141```
4242
4343Если случилась AV. Пишем:
4444
4545``` bash
4646 bt
4747```
4848
4949### Напрямую из окна стека вызовов
5050
5151Чтобы захватить Backtrace изнутри Lazarus, убедитесь, что вы скомпилировали программу, включающую оба параметра "Generate debug info for GDB" (Генерировать отладочную информацию для GDB) и "Display line numbers in run-time error backtraces (-gl)" (Выдавать номера строк в ошибках времени исполнения (-gl)), и вы правильно настроили GDB в параметрах отладчика.
5252
53531. Запускайте ваше приложение, пока не появится проблема
54542. Если появится диалоговое окно с предупреждением о проблеме, показывающее пару кнопок: "Break" (Прервать) и "Continue" (Продолжить), нажмите кнопку "Break".
55553. Откройте окно Call Stack (Стек вызовов) (Menu View (Вид) -\> Debug Windows (Окна отладки) -\>Call Stack (Стек вызовов)).
56564. Просмотрите список вызовов, при необходимости нажимая "(+)More" (Подробнее)
57575. Нажмите кнопку "Copy All" (Копировать все).
58586. Backtrace теперь в вашем буфере обмена и готов к вставке.
5959
6060### Пользователи Windows
6161
62621\. Откройте окно приглашения MS-DOS
6363
64642\. Перейдите на диск, на котором у вас есть exe:
6565
66-`C: {нажмите enter}`
66+```text
67+C: {нажмите enter}
68+```
6769
68703\. Перейдите в каталог, содержащий exe:
6971
70-`cd \myprograms\Project1 {нажмите enter}`
72+```text
73+cd \myprograms\Project1 {нажмите enter}
74+```
7175
72764\. Загрузите вашу программу с использованием GDB:
7377
74-`gdb Project1.exe {нажмите enter}`
78+```text
79+gdb Project1.exe {нажмите enter}
80+```
7581
7682### Пользователи Linux/BSD
7783
78841\. Откройте вашу любимую программу Terminal
7985
80862\. Перейдите в каталог, содержащий исполняемый файл:
8187
82-`cd $HOME/myprograms/project1 {нажмите enter}`
88+```text
89+cd $HOME/myprograms/project1 {нажмите enter}
90+```
8391
84923\. Загрузите вашу программу с использованием GDB:
8593
86-`gdb project1 {нажмите enter}`
94+```text
95+gdb project1 {нажмите enter}
96+```
8797
8898### macOS
8999
90100GDB по умолчанию недоступен для macOS. Вы можете рассмотреть возможность использования отладчика MacOS по умолчанию [[Creating a Backtrace with lldb|lldb]].
91101
92102#### macOS: Графическое приложение
93103
941041\. Если это еще не сделано: создайте комплект приложений (Project (Проект)/ Project Options (Параметры проекта)/ Application (Приложение)/ Create Application Bundle (Создать комплект приложений))
95105
961062\. Откройте вашу любимую программу терминала
97107
981083\. Перейдите в каталог, содержащий пакет приложения / исполняемый файл:
99109
100-`cd $HOME/myprograms/project1 {нажмите Enter}`
110+```text
111+cd $HOME/myprograms/project1 {нажмите Enter}
112+```
101113
1021144\. Загрузите вашу программу с GDB:
103115
104-`gdb project1.app/Contents/MacOS/project1 {нажмите Enter}`
116+```text
117+gdb project1.app/Contents/MacOS/project1 {нажмите Enter}
118+```
105119
106120#### macOS: приложение без GUI, консольная программа
107121
1081221\. Откройте вашу любимую программу терминала
109123
1101242\. Перейдите в каталог, содержащий исполняемый файл:
111125
112-`cd $HOME/myprograms/project1 {нажмите Enter}`
126+```text
127+cd $HOME/myprograms/project1 {нажмите Enter}
128+```
113129
1141303\. Загрузите вашу программу с GDB:
115131
116-`gdb project1 {нажмите Enter}`
132+```text
133+gdb project1 {нажмите Enter}
134+```
117135
118136### GDB, готовый принимать команды
119137
120138Теперь вы должны увидеть подсказку, которая выглядит примерно так:
121139
122-`GNU gdb 6.3.50.20050217-cvs`\
123-`Copyright 2004 Free Software Foundation, Inc.`\
124-`GDB is free software, covered by the GNU General Public License, and you are`\
125-`welcome to change it and/or distribute copies of it under certain conditions.`\
126-`Type "show copying" to see the conditions.`\
127-`There is absolutely no warranty for GDB.  Type "show warranty" for details.`\
128-`This GDB was configured as "i686-pc-linux-gnu".`\
129-`(gdb) _`
140+``` pascal
141+GNU gdb 6.3.50.20050217-cvs
142+Copyright 2004 Free Software Foundation, Inc.
143+GDB is free software, covered by the GNU General Public License, and you are
144+welcome to change it and/or distribute copies of it under certain conditions.
145+Type "show copying" to see the conditions.
146+There is absolutely no warranty for GDB. Type "show warranty" for details.
147+This GDB was configured as "i686-pc-linux-gnu".
148+(gdb) _
149+```
130150
131151**Пусть GDB остановится при возникновении исключения**
132152
133-`(gdb) break fpc_raiseexception {Нажмите Enter}`
153+```text
154+(gdb) break fpc_raiseexception {Нажмите Enter}
155+```
134156
135157**Теперь запустите вашу программу:**
136158
137-`(gdb) run {Нажмите Enter}`
159+```text
160+(gdb) run {Нажмите Enter}
161+```
138162
139163Ваша программа будет работать в обычном режиме, пока не произойдет сбой или не произойдет ошибка.
140164
141165Когда ваша программа аварийно завершает работу вместо обычной ошибки «Нарушение прав доступа» или «Деление на ноль», ваша программа просто останавливается, не отвечает и не перерисовывается. Это потому, что GDB поймал ошибку и ждет, когда вы скажете ему, что делать.
142166
143167Переключитесь в окно MS-DOS или Терминал, и у вас должен появиться вывод на экран, похожий на этот:
144168
145-`Program received signal SIGFPE, Arithmetic exception.`\
146-`0x080733aa in TFORM1__BUTTON1CLICK (SENDER=0x403d8bd8, this=0x403d77d8) at unit1.pas:36`\
147-`Current language:  auto; currently pascal`\
148-`(gdb) _`
169+``` pascal
170+Program received signal SIGFPE, Arithmetic exception.
171+0x080733aa in TFORM1__BUTTON1CLICK (SENDER=0x403d8bd8, this=0x403d77d8) at unit1.pas:36
172+Current language: auto; currently pascal
173+(gdb) _
174+```
149175
150176Чтобы создать обратную трассировку, введите:
151177
152-`backtrace {Нажмите Enter}`
178+```text
179+backtrace {Нажмите Enter}
180+```
153181
154182или
155183
156-`bt {Нажмите Enter}`
184+```text
185+bt {Нажмите Enter}
186+```
157187
158188Теперь у вас должен быть вывод на экран, который выглядит примерно так:
159189
160-`#0  0x080733aa in TFORM1__BUTTON1CLICK (SENDER=0x403d8bd8, this=0x403d77d8) at unit1.pas:36`\
161-`#1  0x080ecd78 in TCONTROL__CLICK (this=0x403d8bd8) at control.inc:1768`\
162-`#2  0x081274bd in TBUTTONCONTROL__CLICK (this=0x403d8bd8) at buttoncontrol.inc:57`\
163-`#3  0x08129171 in TCUSTOMBUTTON__CLICK (this=0x403d8bd8) at buttons.inc:186`\
164-`#4  0x08129198 in TCUSTOMBUTTON__WMDEFAULTCLICKED (MESSAGE={MSG = 1031, WPARAM = `\
165-`        136821192, LPARAM = -1073747812, RESULT = 1075866658, WPARAMLO = 47560, `\
166-`        WPARAMHI = 2087, LPARAMLO = 59548, LPARAMHI = 49151, RESULTLO = 27682, RESULTHI = 16416}, `\
167-`        this=0x403d8bd8) at buttons.inc:198`\
168-`#5  0x0805bbf7 in SYSTEM_TOBJECT_$__DISPATCH$formal ()`\
169-`#6  0x080ec6e0 in TCONTROL__WNDPROC (THEMESSAGE={MSG = 1031, WPARAM = 136821192, `\
170-`        LPARAM = -1073747812, RESULT = 1075866658, WPARAMLO = 47560, WPARAMHI = 2087, `\
171-`        LPARAMLO = 59548,  PARAMHI = 49151, RESULTLO = 27682, RESULTHI = 16416}, `\
172-`        this=0x403d8bd8) at control.inc:1447 `\
173-`#7  0x080e4ed9 in TWINCONTROL__WNDPROC (MESSAGE={MSG = 1031, WPARAM = 136821192, `\
174-`        LPARAM = -1073747812, RESULT = 1075866658, WPARAMLO = 47560, WPARAMHI = 2087, `\
175-`        LPARAMLO = 59548,  PARAMHI = 49151, RESULTLO = 27682, RESULTHI = 16416}, `\
176-`        this=0x403d8bd8) at wincontrol.inc:2154`\
177-`#8  0x08161955 in DELIVERMESSAGE (TARGET=0x403d8bd8, AMESSAGE=void) at gtkproc.inc:3242`\
178-`#9  0x0818897c in GTKWSBUTTON_CLICKED (AWIDGET=0x8285380, AINFO=0x40453794) at gtkwsbuttons.pp:112`\
179-`... { Truncated for simplicity} Complete listing `[[Creating a Backtrace with GDB\Backtrace|here]]\
180-`(gdb) _`
190+```text
191+#0 0x080733aa in TFORM1__BUTTON1CLICK (SENDER=0x403d8bd8, this=0x403d77d8) at unit1.pas:36
192+#1 0x080ecd78 in TCONTROL__CLICK (this=0x403d8bd8) at control.inc:1768
193+#2 0x081274bd in TBUTTONCONTROL__CLICK (this=0x403d8bd8) at buttoncontrol.inc:57
194+#3 0x08129171 in TCUSTOMBUTTON__CLICK (this=0x403d8bd8) at buttons.inc:186
195+#4 0x08129198 in TCUSTOMBUTTON__WMDEFAULTCLICKED (MESSAGE={MSG = 1031, WPARAM =
196+ 136821192, LPARAM = -1073747812, RESULT = 1075866658, WPARAMLO = 47560,
197+ WPARAMHI = 2087, LPARAMLO = 59548, LPARAMHI = 49151, RESULTLO = 27682, RESULTHI = 16416},
198+ this=0x403d8bd8) at buttons.inc:198
199+#5 0x0805bbf7 in SYSTEM_TOBJECT_$__DISPATCH$formal ()
200+#6 0x080ec6e0 in TCONTROL__WNDPROC (THEMESSAGE={MSG = 1031, WPARAM = 136821192,
201+ LPARAM = -1073747812, RESULT = 1075866658, WPARAMLO = 47560, WPARAMHI = 2087,
202+ LPARAMLO = 59548, PARAMHI = 49151, RESULTLO = 27682, RESULTHI = 16416},
203+ this=0x403d8bd8) at control.inc:1447
204+#7 0x080e4ed9 in TWINCONTROL__WNDPROC (MESSAGE={MSG = 1031, WPARAM = 136821192,
205+ LPARAM = -1073747812, RESULT = 1075866658, WPARAMLO = 47560, WPARAMHI = 2087,
206+ LPARAMLO = 59548, PARAMHI = 49151, RESULTLO = 27682, RESULTHI = 16416},
207+ this=0x403d8bd8) at wincontrol.inc:2154
208+#8 0x08161955 in DELIVERMESSAGE (TARGET=0x403d8bd8, AMESSAGE=void) at gtkproc.inc:3242
209+#9 0x0818897c in GTKWSBUTTON_CLICKED (AWIDGET=0x8285380, AINFO=0x40453794) at gtkwsbuttons.pp:112
210+... { Truncated for simplicity} Complete listing here
211+(gdb) _
212+```
181213
182214> **Note:** Если лог обратной трассировки слишком длинный, вам будет предложено нажать Enter для перехода к следующей странице лога обратной трассировки, пока она не будет завершена.
183215
184216Информация, отображаемая здесь, имеет последовательность событий до того места, где произошла ошибка. См. [[Creating a Backtrace with GDB/ru|Интерпретация результатов Backtrace]]
185217
186218Для выхода из GDB (и вашей программы) вы можете набрать:
187219
188-`quit {Нажмите Enter}`
220+```text
221+quit {Нажмите Enter}
222+```
189223
190224или продолжить работу до следующего типа исключения:
191225
192-`cont {Нажмите Enter}`
226+```text
227+cont {Нажмите Enter}
228+```
193229
194230*Подсказка: в любой момент, когда ваша программа запущена, вы можете нажать `Ctrl` + `C` (из терминала или из командной строки MS-DOS), чтобы получить приглашение "(gdb) _"*
195231
196232> **Note:** Использование английской раскладки клавиатуры может предотвратить проблемы с GDB (например, если вы вводите специальные символы, такие как ' \\ ').
197233
198234## Использование lldb на Mac
199235
200236Запускаем lldb
201237
202-`lldb`
238+```text
239+lldb
240+```
203241
204242Загружаем ваш проект
205243
206-`target create project1.app/MacOs/Contents/project1`
244+```text
245+target create project1.app/MacOs/Contents/project1
246+```
207247
208248Устанавливаем точку останова Вы можете пропустить это, если проект падает, вместо того, чтобы вызывать исключение fpc. Если есть ожидаемые исключения, которые будут обработаны блоком `try..xcept`, тогда используйте "c" для продолжения
209249
210-`breakpoint set --func fpc_raiseexception`
250+```text
251+breakpoint set --func fpc_raiseexception
252+```
211253
212254Запускаем его
213255
214-`r`
256+```text
257+r
258+```
215259
216260Когда он остановится, получаем backtrace
217261
218-`bt`
262+```text
263+bt
264+```
219265
220266показать локальные снимки для разных кадров (замените 1 в выделенном кадре на другой кадр, например, верхний 3 или верхний 5)
221267
222-`frame select 1`\
223-`frame variable  -P 1`
268+```text
269+frame select 1
270+frame variable -P 1
271+```
224272
225273## Получение Backtrace из терминала и на электронную почту
226274
227275В настоящее время мы создали лог обратной трассировки и увидели его в терминале (или в приглашении MS-DOS), но как мне получить его в электронном письме? Есть два способа, о которых я знаю:
228276
2292771. Использовать функцию копирования/вставки вашего терминала (или приглашения MS-DOS)
2302782. Перенаправить вывод GDB в файл следующим образом:
231279
232-`gdb project1 > output.txt`
280+```text
281+gdb project1 > output.txt
282+```
233283
234284Теперь вы можете открыть файл и скопировать/вставить его в свою электронную почту.
235285
236286Предостережение: второй метод требует, чтобы вы печатали вслепую. Таким образом, вы должны набрать "run", чтобы запустить программу, и "backtrace", чтобы создать обратную трассировку как обычно, но на экране ничего не будет отображаться.
237287
238288Исключение: в Linux вы можете обойтись без возможности увидеть следующую команду:
239289
240-`touch output.txt & tail output.txt -f & gdb project1 > output.txt`
290+```text
291+touch output.txt & tail output.txt -f & gdb project1 > output.txt
292+```
241293
242294## Интерпретация результатов Backtrace
243295
244296Стек содержит все вызовы в тот момент, когда произошла ошибка деления на ноль. В позиции \#0 находится последний вызов "button1-click()". subproc-call \#37 - это первый вызов main () всего приложения.
245297
246298TODO: Напишите мне :)
247299
248-`(gdb) bt`\
249-`#0  0x080733aa in TFORM1__BUTTON1CLICK (SENDER=0x403d8bd8, this=0x403d77d8) at unit1.pas:36`\
250-`#1  0x080ecd78 in TCONTROL__CLICK (this=0x403d8bd8) at control.inc:1768`\
251-`#2  0x081274bd in TBUTTONCONTROL__CLICK (this=0x403d8bd8) at buttoncontrol.inc:57`\
252-`#3  0x08129171 in TCUSTOMBUTTON__CLICK (this=0x403d8bd8) at buttons.inc:186`\
253-`#4  0x08129198 in TCUSTOMBUTTON__WMDEFAULTCLICKED (MESSAGE={MSG = 1031, WPARAM = 136821192, `\
254-`        LPARAM = -1073747812, RESULT = 1075866658, WPARAMLO = 47560, WPARAMHI = 2087, `\
255-`        LPARAMLO = 59548, LPARAMHI = 49151, RESULTLO = 27682, RESULTHI = 16416}, `\
256-`        this=0x403d8bd8) at buttons.inc:198`\
257-`#5  0x0805bbf7 in SYSTEM_TOBJECT_$__DISPATCH$formal ()`\
258-`#6  0x080ec6e0 in TCONTROL__WNDPROC (THEMESSAGE={MSG = 1031, WPARAM = 136821192, `\
259-`        LPARAM = -1073747812, RESULT = 1075866658, WPARAMLO = 47560, WPARAMHI = 2087, `\
260-`        LPARAMLO = 59548, LPARAMHI = 49151, RESULTLO = 27682, RESULTHI = 16416}, `\
261-`        this=0x403d8bd8) at control.inc:1447`\
262-`#7  0x080e4ed9 in TWINCONTROL__WNDPROC (MESSAGE={MSG = 1031, WPARAM = 136821192, `\
263-`        LPARAM = -1073747812, RESULT = 1075866658, WPARAMLO = 47560, WPARAMHI = 2087, `\
264-`        LPARAMLO = 59548, LPARAMHI = 49151, RESULTLO = 27682, RESULTHI =   16416},`\
265-`        this=0x403d8bd8) at wincontrol.inc:2154`\
266-`#8  0x08161955 in DELIVERMESSAGE (TARGET=0x403d8bd8, AMESSAGE=void) at gtkproc.inc:3242`\
267-`#9  0x0818897c in GTKWSBUTTON_CLICKED (AWIDGET=0x8285380, AINFO=0x40453794) at gtkwsbuttons.pp:112`\
268-`#10 0x401d7877 in gtk_marshal_NONE__NONE () from /usr/lib/libgtk-1.2.so.0`\
269-`#11 0x40206e5a in gtk_signal_remove_emission_hook () from /usr/lib/libgtk-1.2.so.0`\
270-`#12 0x4020616a in gtk_signal_set_funcs () from /usr/lib/libgtk-1.2.so.0`\
271-`#13 0x40204234 in gtk_signal_emit () from /usr/lib/libgtk-1.2.so.0`\
272-`#14 0x40176e1c in gtk_button_clicked () from /usr/lib/libgtk-1.2.so.0`\
273-`#15 0x4017838a in gtk_button_get_relief () from /usr/lib/libgtk-1.2.so.0`\
274-`#16 0x401d7877 in gtk_marshal_NONE__NONE () from /usr/lib/libgtk-1.2.so.0`\
275-`#17 0x4020607b in gtk_signal_set_funcs () from /usr/lib/libgtk-1.2.so.0`\
276-`#18 0x40204234 in gtk_signal_emit () from /usr/lib/libgtk-1.2.so.0`\
277-`#19 0x40176d60 in gtk_button_released () from /usr/lib/libgtk-1.2.so.0`\
278-`#20 0x40177d26 in gtk_button_get_relief () from /usr/lib/libgtk-1.2.so.0`\
279-`#21 0x401d764d in gtk_marshal_BOOL__POINTER () from /usr/lib/libgtk-1.2.so.0`\
280-`#22 0x4020619f in gtk_signal_set_funcs () from /usr/lib/libgtk-1.2.so.0`\
281-`#23 0x40204234 in gtk_signal_emit () from /usr/lib/libgtk-1.2.so.0`\
282-`#24 0x40239fd9 in gtk_widget_event () from /usr/lib/libgtk-1.2.so.0`\
283-`#25 0x401d74d0 in gtk_propagate_event () from /usr/lib/libgtk-1.2.so.0`\
284-`#26 0x401d65c1 in gtk_main_do_event () from /usr/lib/libgtk-1.2.so.0`\
285-`#27 0x40065b44 in gdk_wm_protocols_filter () from /usr/lib/libgdk-1.2.so.0`\
286-`#28 0x4003de75 in g_get_current_time () from /usr/lib/libglib-1.2.so.0`\
287-`#29 0x4003e32c in g_get_current_time () from /usr/lib/libglib-1.2.so.0`\
288-`#30 0x4003e4f5 in g_main_iteration () from /usr/lib/libglib-1.2.so.0`\
289-`#31 0x401d6388 in gtk_main_iteration_do () from /usr/lib/libgtk-1.2.so.0`\
290-`#32 0x080b4d26 in TGTKWIDGETSET__WAITMESSAGE (this=0x40473014) at gtkobject.inc:1427`\
291-`#33 0x08070073 in TAPPLICATION__IDLE (this=0x4045b014) at application.inc:319`\
292-`#34 0x08070ffb in TAPPLICATION__HANDLEMESSAGE (this=0x4045b014) at application.inc:827`\
293-`#35 0x08071380 in RUNMESSAGE (parentfp=0xbffff5a4) at application.inc:933`\
294-`#36 0x080712d7 in TAPPLICATION__RUN (this=0x4045b014) at application.inc:944`\
295-`#37 0x080531c3 in main () at project1.lpr:13`\
296-`(gdb)`
300+```text
301+(gdb) bt
302+#0 0x080733aa in TFORM1__BUTTON1CLICK (SENDER=0x403d8bd8, this=0x403d77d8) at unit1.pas:36
303+#1 0x080ecd78 in TCONTROL__CLICK (this=0x403d8bd8) at control.inc:1768
304+#2 0x081274bd in TBUTTONCONTROL__CLICK (this=0x403d8bd8) at buttoncontrol.inc:57
305+#3 0x08129171 in TCUSTOMBUTTON__CLICK (this=0x403d8bd8) at buttons.inc:186
306+#4 0x08129198 in TCUSTOMBUTTON__WMDEFAULTCLICKED (MESSAGE={MSG = 1031, WPARAM = 136821192,
307+ LPARAM = -1073747812, RESULT = 1075866658, WPARAMLO = 47560, WPARAMHI = 2087,
308+ LPARAMLO = 59548, LPARAMHI = 49151, RESULTLO = 27682, RESULTHI = 16416},
309+ this=0x403d8bd8) at buttons.inc:198
310+#5 0x0805bbf7 in SYSTEM_TOBJECT_$__DISPATCH$formal ()
311+#6 0x080ec6e0 in TCONTROL__WNDPROC (THEMESSAGE={MSG = 1031, WPARAM = 136821192,
312+ LPARAM = -1073747812, RESULT = 1075866658, WPARAMLO = 47560, WPARAMHI = 2087,
313+ LPARAMLO = 59548, LPARAMHI = 49151, RESULTLO = 27682, RESULTHI = 16416},
314+ this=0x403d8bd8) at control.inc:1447
315+#7 0x080e4ed9 in TWINCONTROL__WNDPROC (MESSAGE={MSG = 1031, WPARAM = 136821192,
316+ LPARAM = -1073747812, RESULT = 1075866658, WPARAMLO = 47560, WPARAMHI = 2087,
317+ LPARAMLO = 59548, LPARAMHI = 49151, RESULTLO = 27682, RESULTHI = 16416},
318+ this=0x403d8bd8) at wincontrol.inc:2154
319+#8 0x08161955 in DELIVERMESSAGE (TARGET=0x403d8bd8, AMESSAGE=void) at gtkproc.inc:3242
320+#9 0x0818897c in GTKWSBUTTON_CLICKED (AWIDGET=0x8285380, AINFO=0x40453794) at gtkwsbuttons.pp:112
321+#10 0x401d7877 in gtk_marshal_NONE__NONE () from /usr/lib/libgtk-1.2.so.0
322+#11 0x40206e5a in gtk_signal_remove_emission_hook () from /usr/lib/libgtk-1.2.so.0
323+#12 0x4020616a in gtk_signal_set_funcs () from /usr/lib/libgtk-1.2.so.0
324+#13 0x40204234 in gtk_signal_emit () from /usr/lib/libgtk-1.2.so.0
325+#14 0x40176e1c in gtk_button_clicked () from /usr/lib/libgtk-1.2.so.0
326+#15 0x4017838a in gtk_button_get_relief () from /usr/lib/libgtk-1.2.so.0
327+#16 0x401d7877 in gtk_marshal_NONE__NONE () from /usr/lib/libgtk-1.2.so.0
328+#17 0x4020607b in gtk_signal_set_funcs () from /usr/lib/libgtk-1.2.so.0
329+#18 0x40204234 in gtk_signal_emit () from /usr/lib/libgtk-1.2.so.0
330+#19 0x40176d60 in gtk_button_released () from /usr/lib/libgtk-1.2.so.0
331+#20 0x40177d26 in gtk_button_get_relief () from /usr/lib/libgtk-1.2.so.0
332+#21 0x401d764d in gtk_marshal_BOOL__POINTER () from /usr/lib/libgtk-1.2.so.0
333+#22 0x4020619f in gtk_signal_set_funcs () from /usr/lib/libgtk-1.2.so.0
334+#23 0x40204234 in gtk_signal_emit () from /usr/lib/libgtk-1.2.so.0
335+#24 0x40239fd9 in gtk_widget_event () from /usr/lib/libgtk-1.2.so.0
336+#25 0x401d74d0 in gtk_propagate_event () from /usr/lib/libgtk-1.2.so.0
337+#26 0x401d65c1 in gtk_main_do_event () from /usr/lib/libgtk-1.2.so.0
338+#27 0x40065b44 in gdk_wm_protocols_filter () from /usr/lib/libgdk-1.2.so.0
339+#28 0x4003de75 in g_get_current_time () from /usr/lib/libglib-1.2.so.0
340+#29 0x4003e32c in g_get_current_time () from /usr/lib/libglib-1.2.so.0
341+#30 0x4003e4f5 in g_main_iteration () from /usr/lib/libglib-1.2.so.0
342+#31 0x401d6388 in gtk_main_iteration_do () from /usr/lib/libgtk-1.2.so.0
343+#32 0x080b4d26 in TGTKWIDGETSET__WAITMESSAGE (this=0x40473014) at gtkobject.inc:1427
344+#33 0x08070073 in TAPPLICATION__IDLE (this=0x4045b014) at application.inc:319
345+#34 0x08070ffb in TAPPLICATION__HANDLEMESSAGE (this=0x4045b014) at application.inc:827
346+#35 0x08071380 in RUNMESSAGE (parentfp=0xbffff5a4) at application.inc:933
347+#36 0x080712d7 in TAPPLICATION__RUN (this=0x4045b014) at application.inc:944
348+#37 0x080531c3 in main () at project1.lpr:13
349+(gdb)
350+```
297351
298352Этот Backtrace был создан при использовании этого кода:
299353
300354``` pascal
301355 30. procedure TForm1.Button1Click(Sender: TObject);
302356 31. var
303357 32. X, Y, Z: Integer;
304358 33. begin
305359 34. X := 0;
306360 35. Y := 0;
307361 36. Z := X div Y; // ошибка деления на ноль
308362 37. end;
309363```
310364
311365## См. также
312366
313367- [[Creating a Backtrace with lldb]]
314368
315369---
316370*From the Free Pascal wiki, page "Creating a Backtrace with GDB/ru", as it stood on 2019-12-22 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history