Как отладить под управлением программу C++ в Linux?

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

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

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

gdb -p PID

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

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

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

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

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

7
задан skydoor 18 March 2010 в 03:05
поделиться

3 ответа

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

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

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

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

2
ответ дан 7 December 2019 в 14:30
поделиться

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

gdb prog PID

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

1
ответ дан 7 December 2019 в 14:30
поделиться

Используйте 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.

1
ответ дан 7 December 2019 в 14:30
поделиться
Другие вопросы по тегам:

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