Как отладить работающую программу C ++ в Linux? - PullRequest
7 голосов
/ 18 марта 2010

У меня есть вопрос об отладке работающей программы C ++ в Linux. Если программирование уже запущено и не может быть прервано, как это сделать.

Я могу найти три способа, но я не знаю слишком много о деталях, я благодарен, если кто-нибудь сможет это проработать глубже.

1) мы можем использовать GDB, указав идентификатор процесса

gdb -p PID

В этом случае, в чем разница между этим и attach PID?

2) Мы можем использовать pstat, однако я использую Ubuntu, не pstat, а только mpstat

похоже, что mpstat не предоставляет слишком много информации и не так много опций.

3) проверьте подробную информацию в каталоге ./proc

В этом случае просто перейдите в каталог с PID. Однако следует ли это делать вручную?

Ответы [ 3 ]

2 голосов
/ 18 марта 2010

Я не могу найти опцию -p в gdb man или их документации, но она работает! Я пробовал это много раз со старыми версиями на RedHat и 7.0.1 на Debian.

Я не уверен, как именно он находит exe по PID (возможно /proc/<PID>/exe), но это так. Поскольку это не описано в их документации, возможно, это не самый рекомендуемый способ, но у меня не было с этим проблем.

Нет заметной разницы между gdb -p <PID> и запущенным gdb, а в их оболочке набирается attach <PID>.

Я лично предпочитаю ps xa| grep myprogram для получения PID

1 голос
/ 18 марта 2010

Используйте ps -ef | grep <your program>, чтобы получить PID. Затем запустите gdb <your program> <PID>. 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.

1 голос
/ 18 марта 2010

Что касается техники 1, флаг -p отсутствует, и вам все равно нужно название программы:

gdb prog PID

Нет никакой разницы между выполнением этого и выполнением gdb prog и последующим сообщением gdb attach pid.

...