@@ -720,7 +720,7 @@ <h1>Source code for libdebug.debugger.internal_debugger</h1><div class="highligh
720
720
< span class ="k "> if</ span > < span class ="ow "> not</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __polling_thread_command_queue</ span > < span class ="o "> .</ span > < span class ="n "> empty</ span > < span class ="p "> ():</ span >
721
721
< span class ="k "> raise</ span > < span class ="ne "> RuntimeError</ span > < span class ="p "> (</ span > < span class ="s2 "> "Polling thread command queue not empty."</ span > < span class ="p "> )</ span >
722
722
723
- < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __polling_thread_command_queue</ span > < span class ="o "> .</ span > < span class ="n "> put</ span > < span class ="p "> ((</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __threaded_run</ span > < span class ="p "> ,</ span > < span class ="p "> (</ span > < span class ="n "> redirect_pipes</ span > < span class ="p "> ,</ span > < span class =" p " > )))</ span >
723
+ < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __polling_thread_command_queue</ span > < span class ="o "> .</ span > < span class ="n "> put</ span > < span class ="p "> ((</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __threaded_run</ span > < span class ="p "> ,</ span > < span class ="p "> (</ span > < span class ="n "> redirect_pipes</ span > < span class ="p "> ,)))</ span >
724
724
725
725
< span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _join_and_check_status</ span > < span class ="p "> ()</ span >
726
726
@@ -1261,7 +1261,7 @@ <h1>Source code for libdebug.debugger.internal_debugger</h1><div class="highligh
1261
1261
< a class ="viewcode-back " href ="../../../libdebug.debugger.html#libdebug.debugger.internal_debugger.InternalDebugger.gdb "> [docs]</ a >
1262
1262
< span class ="nd "> @background_alias</ span > < span class ="p "> (</ span > < span class ="n "> _background_invalid_call</ span > < span class ="p "> )</ span >
1263
1263
< span class ="nd "> @change_state_function_process</ span >
1264
- < span class ="k "> def</ span > < span class ="nf "> gdb</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> :</ span > < span class ="n "> InternalDebugger</ span > < span class ="p "> ,</ span > < span class ="n "> open_in_new_process</ span > < span class ="p "> :</ span > < span class ="nb "> bool</ span > < span class ="o "> =</ span > < span class ="kc "> True</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
1264
+ < span class ="k "> def</ span > < span class ="nf "> gdb</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> :</ span > < span class ="n "> InternalDebugger</ span > < span class ="p "> ,</ span > < span class ="n "> migrate_breakpoints </ span > < span class =" p " > : </ span > < span class =" nb " > bool </ span > < span class =" o " > = </ span > < span class =" kc " > True </ span > < span class =" p " > , </ span > < span class =" n " > open_in_new_process</ span > < span class ="p "> :</ span > < span class ="nb "> bool</ span > < span class ="o "> =</ span > < span class ="kc "> True</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
1265
1265
< span class ="w "> </ span > < span class ="sd "> """Migrates the current debugging session to GDB."""</ span >
1266
1266
< span class ="c1 "> # TODO: not needed?</ span >
1267
1267
< span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> interrupt</ span > < span class ="p "> ()</ span >
@@ -1270,21 +1270,23 @@ <h1>Source code for libdebug.debugger.internal_debugger</h1><div class="highligh
1270
1270
1271
1271
< span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _join_and_check_status</ span > < span class ="p "> ()</ span >
1272
1272
1273
+ < span class ="n "> command</ span > < span class ="o "> =</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _craft_gdb_migration_command</ span > < span class ="p "> (</ span > < span class ="n "> migrate_breakpoints</ span > < span class ="p "> )</ span >
1274
+
1273
1275
< span class ="k "> if</ span > < span class ="n "> open_in_new_process</ span > < span class ="ow "> and</ span > < span class ="n "> libcontext</ span > < span class ="o "> .</ span > < span class ="n "> terminal</ span > < span class ="p "> :</ span >
1274
- < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _open_gdb_in_new_process</ span > < span class ="p "> ()</ span >
1276
+ < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _open_gdb_in_new_process</ span > < span class ="p "> (</ span > < span class =" n " > command </ span > < span class =" p " > )</ span >
1275
1277
< span class ="k "> else</ span > < span class ="p "> :</ span >
1276
1278
< span class ="k "> if</ span > < span class ="n "> open_in_new_process</ span > < span class ="p "> :</ span >
1277
1279
< span class ="n "> liblog</ span > < span class ="o "> .</ span > < span class ="n "> warning</ span > < span class ="p "> (</ span >
1278
1280
< span class ="s2 "> "Cannot open in a new process. Please configure the terminal in libcontext.terminal."</ span > < span class ="p "> ,</ span >
1279
1281
< span class ="p "> )</ span >
1280
- < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _open_gdb_in_shell</ span > < span class ="p "> ()</ span >
1282
+ < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _open_gdb_in_shell</ span > < span class ="p "> (</ span > < span class =" n " > command </ span > < span class =" p " > )</ span >
1281
1283
1282
1284
< span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __polling_thread_command_queue</ span > < span class ="o "> .</ span > < span class ="n "> put</ span > < span class ="p "> ((</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __threaded_migrate_from_gdb</ span > < span class ="p "> ,</ span > < span class ="p "> ()))</ span >
1283
1285
1284
1286
< span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _join_and_check_status</ span > < span class ="p "> ()</ span > </ div >
1285
1287
1286
1288
1287
- < span class ="k "> def</ span > < span class ="nf "> _craft_gdb_migration_command</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> :</ span > < span class ="n "> InternalDebugger</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="nb "> list</ span > < span class ="p "> [</ span > < span class ="nb "> str</ span > < span class ="p "> ]:</ span >
1289
+ < span class ="k "> def</ span > < span class ="nf "> _craft_gdb_migration_command</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> :</ span > < span class ="n "> InternalDebugger</ span > < span class ="p "> , </ span > < span class =" n " > migrate_breakpoints </ span > < span class =" p " > : </ span > < span class =" nb " > bool </ span > < span class =" p " > )</ span > < span class ="o "> -></ span > < span class ="nb "> list</ span > < span class ="p "> [</ span > < span class ="nb "> str</ span > < span class ="p "> ]:</ span >
1288
1290
< span class ="w "> </ span > < span class ="sd "> """Crafts the command to migrate to GDB."""</ span >
1289
1291
< span class ="n "> gdb_command</ span > < span class ="o "> =</ span > < span class ="p "> [</ span >
1290
1292
< span class ="s2 "> "/bin/gdb"</ span > < span class ="p "> ,</ span >
@@ -1299,6 +1301,9 @@ <h1>Source code for libdebug.debugger.internal_debugger</h1><div class="highligh
1299
1301
< span class ="s2 "> "ni"</ span > < span class ="p "> ,</ span >
1300
1302
< span class ="p "> ]</ span >
1301
1303
1304
+ < span class ="k "> if</ span > < span class ="ow "> not</ span > < span class ="n "> migrate_breakpoints</ span > < span class ="p "> :</ span >
1305
+ < span class ="k "> return</ span > < span class ="n "> gdb_command</ span >
1306
+
1302
1307
< span class ="n "> bp_args</ span > < span class ="o "> =</ span > < span class ="p "> []</ span >
1303
1308
< span class ="k "> for</ span > < span class ="n "> bp</ span > < span class ="ow "> in</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> breakpoints</ span > < span class ="o "> .</ span > < span class ="n "> values</ span > < span class ="p "> ():</ span >
1304
1309
< span class ="k "> if</ span > < span class ="n "> bp</ span > < span class ="o "> .</ span > < span class ="n "> enabled</ span > < span class ="p "> :</ span >
@@ -1320,10 +1325,8 @@ <h1>Source code for libdebug.debugger.internal_debugger</h1><div class="highligh
1320
1325
1321
1326
< span class ="k "> return</ span > < span class ="n "> gdb_command</ span > < span class ="o "> +</ span > < span class ="n "> bp_args</ span >
1322
1327
1323
- < span class ="k "> def</ span > < span class ="nf "> _open_gdb_in_new_process</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> :</ span > < span class ="n "> InternalDebugger</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
1328
+ < span class ="k "> def</ span > < span class ="nf "> _open_gdb_in_new_process</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> :</ span > < span class ="n "> InternalDebugger</ span > < span class ="p "> , </ span > < span class =" n " > args </ span > < span class =" p " > : </ span > < span class =" nb " > list </ span > < span class =" p " > [ </ span > < span class =" nb " > str </ span > < span class =" p " > ] )</ span > < span class ="o "> -></ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
1324
1329
< span class ="w "> </ span > < span class ="sd "> """Opens GDB in a new process following the configuration in libcontext.terminal."""</ span >
1325
- < span class ="n "> args</ span > < span class ="o "> =</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _craft_gdb_migration_command</ span > < span class ="p "> ()</ span >
1326
-
1327
1330
< span class ="n "> initial_pid</ span > < span class ="o "> =</ span > < span class ="n "> Popen</ span > < span class ="p "> (</ span > < span class ="n "> libcontext</ span > < span class ="o "> .</ span > < span class ="n "> terminal</ span > < span class ="o "> +</ span > < span class ="n "> args</ span > < span class ="p "> )</ span > < span class ="o "> .</ span > < span class ="n "> pid</ span >
1328
1331
1329
1332
< span class ="n "> os</ span > < span class ="o "> .</ span > < span class ="n "> waitpid</ span > < span class ="p "> (</ span > < span class ="n "> initial_pid</ span > < span class ="p "> ,</ span > < span class ="mi "> 0</ span > < span class ="p "> )</ span >
@@ -1348,11 +1351,10 @@ <h1>Source code for libdebug.debugger.internal_debugger</h1><div class="highligh
1348
1351
< span class ="c1 "> # So we must keep polling it until it is no longer running</ span >
1349
1352
< span class ="k "> pass</ span >
1350
1353
1351
- < span class ="k "> def</ span > < span class ="nf "> _open_gdb_in_shell</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> :</ span > < span class ="n "> InternalDebugger</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
1354
+ < span class ="k "> def</ span > < span class ="nf "> _open_gdb_in_shell</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> :</ span > < span class ="n "> InternalDebugger</ span > < span class ="p "> , </ span > < span class =" n " > args </ span > < span class =" p " > : </ span > < span class =" nb " > list </ span > < span class =" p " > [ </ span > < span class =" nb " > str </ span > < span class =" p " > ] )</ span > < span class ="o "> -></ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
1352
1355
< span class ="w "> </ span > < span class ="sd "> """Open GDB in the current shell."""</ span >
1353
1356
< span class ="n "> gdb_pid</ span > < span class ="o "> =</ span > < span class ="n "> os</ span > < span class ="o "> .</ span > < span class ="n "> fork</ span > < span class ="p "> ()</ span >
1354
1357
< span class ="k "> if</ span > < span class ="n "> gdb_pid</ span > < span class ="o "> ==</ span > < span class ="mi "> 0</ span > < span class ="p "> :</ span > < span class ="c1 "> # This is the child process.</ span >
1355
- < span class ="n "> args</ span > < span class ="o "> =</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _craft_gdb_migration_command</ span > < span class ="p "> ()</ span >
1356
1358
< span class ="n "> os</ span > < span class ="o "> .</ span > < span class ="n "> execv</ span > < span class ="p "> (</ span > < span class ="s2 "> "/bin/gdb"</ span > < span class ="p "> ,</ span > < span class ="n "> args</ span > < span class ="p "> )</ span >
1357
1359
< span class ="k "> else</ span > < span class ="p "> :</ span > < span class ="c1 "> # This is the parent process.</ span >
1358
1360
< span class ="c1 "> # Parent ignores SIGINT, so only GDB (child) receives it</ span >
0 commit comments