У меня есть вопрос об отладке под управлением программы C++ в Linux. Если программирование уже работает и не может быть прервано, как сделать это.
Я могу найти три пути, но я не знаю слишком много о деталях, я благодарен, если кто-либо может разработать его глубже.
1) мы можем использовать GDB путем определения идентификатора процесса
gdb -p PID
В этом случае, каково различие между этим и attach PID
?
2) Мы можем использовать pstat, однако, я использую Ubuntu, никакой pstat, но только mpstat
кажется, что mpstat не предоставляет слишком много информации и не столько опций.
3) проверьте подробную информацию в соответствии с каталогом./proc
В этом случае просто перейдите к каталогу с PID. Однако это должно быть сделано вручную?
Я не могу найти опцию -p
в gdb man или их документации, но она работает! Я много раз пробовал это со старыми версиями RedHat и 7.0.1 в Debian.
Я не уверен, как именно он находит exe по PID (возможно, / proc /
), но он находит. Поскольку он не описан в их документации, возможно, это не самый рекомендуемый способ, но у меня с ним не было никаких проблем.
Нет заметной разницы между gdb -p
и запущенным gdb и в их оболочке, набирающей attach
.
Лично я предпочитаю ps xa | grep myprogram
для получения PID
Что касается метода 1, здесь нет флага -p
, и вам по-прежнему нужно имя программы:
gdb prog PID
Там Нет никакой разницы между выполнением этого и запуском gdb prog
и последующим сообщением gdb присоединить pid
.
Используйте ps -ef | grep <ваша программа>
, чтобы получить PID. Затем запустите gdb <ваша программа>
.
pstat
не является стандартной командой. Я использовал ее только в Solaris.
например,
gayan@gayan:~/FE/bin> ./fe&
[1] 5866
gayan@gayan:~/FE/bin> ps -ef | grep fe
gayan 5866 5836 2 10:19 pts/3 00:00:00 ./fe
gayan 5871 5836 0 10:19 pts/3 00:00:00 grep fe
gayan@gayan:~/FE/bin> gdb fe 5866
GNU gdb (GDB; openSUSE 11.1) 6.8.50.20081120-cvs
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 "i586-suse-linux".
For bug reporting instructions, please see:
<http://bugs.opensuse.org/>...
Attaching to program: /home/gayan/FE/bin/fe, process 5866
Вышеприведенное было выполнено на openSuse, но должно работать и на Ubuntu.