Как к отладке во время выполнения совместно использовал библиотеки?

echo json_encode($request);

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

. Если вы хотите получить доступ ко всем вашим запросам , то я предлагаю вам сделать это вместо -

$request->all();

. можете использовать dump () или dd () в соответствии с вашим требованием распечатать вывод на консоли.

dump($request->all());
41
задан 1 June 2009 в 08:51
поделиться

4 ответа

Вам просто нужно вызвать gdb с исполняемым файлом (неважно, ваш он или сторонний). Вот пример, в котором я отлаживаю команду ls и устанавливаю точку останова в (общей) c библиотеке . В этом примере используется gdb 6.8, который поддерживает отложенные (ожидающие) точки останова, что упрощает эту задачу:

gdb /bin/ls
GNU gdb 6.8-debian
Copyright (C) 2008 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-linux-gnu"...
(no debugging symbols found)
(gdb) b write
Function "write" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (write) pending.
(gdb) r
Starting program: /bin/ls
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
[Thread debugging using libthread_db enabled]
(no debugging symbols found)
(no debugging symbols found)
[New Thread 0x7f98d2d23780 (LWP 7029)]
[Switching to Thread 0x7f98d2d23780 (LWP 7029)]

Breakpoint 1, 0x00007f98d2264bb0 in write () from /lib/libc.so.6
(gdb)

Как вы можете видеть, gdb автоматически управляет всеми потоками, используемыми исполняемым файлом. Здесь не нужно делать ничего особенного для потоков. Точка останова будет работать в любом потоке.

В качестве альтернативы, если вы хотите подключить отладчик к уже запущенному приложению (я использую здесь tail -f / tmp / ttt в качестве примера):

ps ux | grep tail
lothar    8496  0.0  0.0   9352   804 pts/3    S+   12:38   0:00 tail -f /tmp/ttt
lothar    8510  0.0  0.0   5164   840 pts/4    S+   12:39   0:00 grep tail

gdb
GNU gdb 6.8-debian
Copyright (C) 2008 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-linux-gnu"...
(no debugging symbols found)
(gdb) attach 8496
Attaching to program: /usr/bin/tail, process 8496
Reading symbols from /lib/librt.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/librt.so.1
Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/libpthread.so.0...(no debugging symbols found)...done.
[Thread debugging using libthread_db enabled]
[New Thread 0x7f24853f56e0 (LWP 8496)]
Loaded symbols for /lib/libpthread.so.0
Reading symbols from /lib/ld-linux-x86-64.so.2...
(no debugging symbols found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
(no debugging symbols found)
0x00007f2484d2bb50 in nanosleep () from /lib/libc.so.6
(gdb) b write
Breakpoint 1 at 0x7f2484d57bb0
(gdb) c
Continuing.
[Switching to Thread 0x7f24853f56e0 (LWP 8496)]

Breakpoint 1, 0x00007f2484d57bb0 in write () from /lib/libc.so.6
(gdb)
35
ответ дан 27 November 2019 в 00:52
поделиться

Обычно процедура отладки разделяемой библиотеки во многом аналогична отладке исполняемого файла - основное отличие состоит в том, что что вы не сможете установить точку останова, пока общая библиотека не будет загружена в память. Вы присоединяете отладчик к основному исполняемому файлу.

Если вы отлаживаете приложение, которое не принадлежит вам, но использует ваш модуль в архитектуре плагина, Вы все еще используете тот же метод. Убедитесь, что (как всегда) у вас есть отладочная информация для вашей общей библиотеки. В Windows вы должны создать файл .pdb. Я думаю, что с gcc вы указываете специальный флаг компилятора (-g?), Чтобы обеспечить предоставление отладочной информации. Вы присоединяете отладчик к стороннему приложению.

9
ответ дан 27 November 2019 в 00:52
поделиться

Я помню, как тестировал общие библиотеки, создавая имитацию приложения, которое их использовало. Если вы готовы проделать большую работу, вы можете создать вторую фиктивную общую библиотеку, которая просто собирает информацию о том, как библиотека используется сторонним приложением, а затем заставить ваше фиктивное приложение воспроизводить эту информацию.

Конечно, никогда не сомневайтесь в силе правильно размещенных вызовов printf и fprintf.

1
ответ дан 27 November 2019 в 00:52
поделиться

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

0
ответ дан 27 November 2019 в 00:52
поделиться
Другие вопросы по тегам:

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