1
+ import logging
2
+ import subprocess
3
+ import os
4
+ from distutils .spawn import find_executable
5
+ from typing import Union , List , Optional
6
+ from pygdbmi .gdbcontroller import GdbController
7
+ from pygdbmi .IoManager import IoManager
8
+ from pygdbmi .constants import (
9
+ DEFAULT_GDB_TIMEOUT_SEC ,
10
+ DEFAULT_TIME_TO_CHECK_FOR_ADDITIONAL_OUTPUT_SEC ,
11
+ )
12
+
13
+ DEFAULT_GDB_LAUNCH_COMMAND = ["gdb" , "--nx" , "--quiet" , "--interpreter=mi3" ]
14
+ logger = logging .getLogger (__name__ )
15
+
16
+ class IDDGdbController (GdbController ):
17
+ def spawn_new_gdb_subprocess (self ) -> int :
18
+ if self .gdb_process :
19
+ logger .debug (
20
+ "Killing current gdb subprocess (pid %d)" % self .gdb_process .pid
21
+ )
22
+ self .exit ()
23
+
24
+ logger .debug (f'Launching gdb: { " " .join (self .command )} ' )
25
+
26
+ my_env = os .environ .copy ()
27
+
28
+ # Use pipes to the standard streams
29
+ self .gdb_process = subprocess .Popen (
30
+ self .command ,
31
+ shell = False ,
32
+ stdout = subprocess .PIPE ,
33
+ stdin = subprocess .PIPE ,
34
+ stderr = subprocess .PIPE ,
35
+ bufsize = 0 ,
36
+ env = my_env
37
+ )
38
+
39
+ self .io_manager = IoManager (
40
+ self .gdb_process .stdin ,
41
+ self .gdb_process .stdout ,
42
+ self .gdb_process .stderr ,
43
+ self .time_to_check_for_additional_output_sec ,
44
+ )
45
+ return self .gdb_process .pid
0 commit comments