2017-11-14 2 views
1

Ich versuche, einen vorhandenen Prozess anhängen, einige Befehle ausführen und die erforderlichen Informationen drucken. Wie auch immer, wenn ich es mache, sehe ich, dass die PID des Prozesses geändert wird (mit killed) Befehl wird angezeigt.GDB pid ändert sich, wenn automatisch verbunden und


-Code

 1 #include <iostream> 
    2 #include <unistd.h> 
    3 using namespace std; 
    4 
    5 
    6 int main() 
    7 { 
    8  do 
    9  { 
    10   static int s = 100; 
    11   s = s+1; 
    12   sleep (3); 
    13  } while(1); 
    14  return 0; 
    15 } 
    16 

GDB-Befehle

> cat /tmp/command.txt  
set pagination off 
set logging file /home/testgrp/gdb.txt 
set logging on 
b sample.cc:11 
commands 1 
    p s 
end 
run 1 
quit 

Ausgabe

[email protected]:/desktop/user1/workspace# ps -eaf | grep out 
root  16724 8877 0 08:25 pts/1 00:00:00 grep --color=auto out 
[email protected]:/desktop/user1/workspace# cat /home/testgrp/gdb.txt 
cat: /home/testgrp/gdb.txt: No such file or directory 
[email protected]:/desktop/user1/workspace# ./a.out & 
[1] 16762 
[email protected]:/desktop/user1/workspace# gdb --batch-silent -x=/tmp/command.txt -p 16762 
[1]+ Killed     ./a.out 
[email protected]:/desktop/user1/workspace# ps -eaf | grep out 
root  16805  1 0 08:25 pts/1 00:00:00 /desktop/user1/workspace/a.out 1 
root  16823 8877 0 08:25 pts/1 00:00:00 grep --color=auto out 
[email protected]:/desktop/user1/workspace# cat /home/testgrp/gdb.txt 
Breakpoint 1 at 0x400711: file sample.cc, line 11. 
$1 = 100 
A debugging session is active. 

    Inferior 1 [process 16805] will be detached. 

Quit anyway? (y or n) [answered Y; input not from terminal] 

Frage

  1. Wie kann ich die erforderlichen Informationen erhalten, ohne dass die PID des Prozesses zu ändern?
  2. Noch wichtiger ist, warum hat die pid Änderung und vorherige PID ist killed

Anhang

GDB Version

GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2aka8.0.1) 7.7.1 
Copyright (C) 2014 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". 
+0

gelöst wird nicht getötet. Ihr Prozess läuft noch, wenn gdb beendet wird. –

+0

@ Jean-FrançoisFabre: Warum sehe ich das Pid für den Prozess geändert? Sie können in der Ausgabe die Änderung der PID sehen. Ich möchte die Informationen ohne Änderung in pid erfassen. –

+0

Tut mir leid, ich glaube nicht, dass das möglich ist. Überprüfen Sie, ob der Prozess 16805 (oder was immer es ist) noch läuft. Es sei denn, gdb stürzt ab. Aber es sollte nicht als ein anderer Prozess respawnen. nicht möglich. –

Antwort

4

in den letzten beiden Zeilen der gdb Skripte

run 1 
quit 

"run 1" startet das Programm neu, das mit "1" debuggt wird. Standardmäßig sollte es Sie bitten, den Neustart zu bestätigen oder nicht. Aber Sie haben ein Argument "--batch-silent", wenn Sie gdb starten. Ihr Prozess wird also ohne Nachricht neu gestartet.

löschen Sie "--batch-silent" und die letzten 2 Zeilen Ihres GDB-Skript, dann können Sie brechen und debuggen. "b sample.cc:11" stoppt im Systemfunktionsschlaf, Sie können es in andere Zeile ändern, wenn Sie sich verwirrt fühlen. (Ich empfehle Ihnen, einige einfachere Demos vor der Verwendung von gdb zu lesen, so viele cmd werden Anfänger verwirrt fühlen)

Verwandte Themen