@@ -720,7 +720,7 @@ <h1>Source code for libdebug.debugger.internal_debugger</h1><div class="highligh
720720 < 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 >
721721 < 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 >
722722
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 >
724724
725725 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _join_and_check_status</ span > < span class ="p "> ()</ span >
726726
@@ -1261,7 +1261,7 @@ <h1>Source code for libdebug.debugger.internal_debugger</h1><div class="highligh
12611261< a class ="viewcode-back " href ="../../../libdebug.debugger.html#libdebug.debugger.internal_debugger.InternalDebugger.gdb "> [docs]</ a >
12621262 < span class ="nd "> @background_alias</ span > < span class ="p "> (</ span > < span class ="n "> _background_invalid_call</ span > < span class ="p "> )</ span >
12631263 < 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 >
12651265< span class ="w "> </ span > < span class ="sd "> """Migrates the current debugging session to GDB."""</ span >
12661266 < span class ="c1 "> # TODO: not needed?</ span >
12671267 < 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
12701270
12711271 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _join_and_check_status</ span > < span class ="p "> ()</ span >
12721272
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+
12731275 < 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 >
12751277 < span class ="k "> else</ span > < span class ="p "> :</ span >
12761278 < span class ="k "> if</ span > < span class ="n "> open_in_new_process</ span > < span class ="p "> :</ span >
12771279 < span class ="n "> liblog</ span > < span class ="o "> .</ span > < span class ="n "> warning</ span > < span class ="p "> (</ span >
12781280 < span class ="s2 "> "Cannot open in a new process. Please configure the terminal in libcontext.terminal."</ span > < span class ="p "> ,</ span >
12791281 < 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 >
12811283
12821284 < 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 >
12831285
12841286 < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _join_and_check_status</ span > < span class ="p "> ()</ span > </ div >
12851287
12861288
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 >
12881290< span class ="w "> </ span > < span class ="sd "> """Crafts the command to migrate to GDB."""</ span >
12891291 < span class ="n "> gdb_command</ span > < span class ="o "> =</ span > < span class ="p "> [</ span >
12901292 < 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
12991301 < span class ="s2 "> "ni"</ span > < span class ="p "> ,</ span >
13001302 < span class ="p "> ]</ span >
13011303
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+
13021307 < span class ="n "> bp_args</ span > < span class ="o "> =</ span > < span class ="p "> []</ span >
13031308 < 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 >
13041309 < 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
13201325
13211326 < span class ="k "> return</ span > < span class ="n "> gdb_command</ span > < span class ="o "> +</ span > < span class ="n "> bp_args</ span >
13221327
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 >
13241329< 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-
13271330 < 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 >
13281331
13291332 < 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
13481351 < span class ="c1 "> # So we must keep polling it until it is no longer running</ span >
13491352 < span class ="k "> pass</ span >
13501353
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 >
13521355< span class ="w "> </ span > < span class ="sd "> """Open GDB in the current shell."""</ span >
13531356 < 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 >
13541357 < 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 >
13561358 < 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 >
13571359 < span class ="k "> else</ span > < span class ="p "> :</ span > < span class ="c1 "> # This is the parent process.</ span >
13581360 < span class ="c1 "> # Parent ignores SIGINT, so only GDB (child) receives it</ span >
0 commit comments