Bug 17613

Summary: printing of large objects not interruptable
Product: gdb Reporter: dje
Component: gdbAssignee: Not yet assigned to anyone <unassigned>
Status: NEW ---    
Severity: normal    
Priority: P2    
Version: 7.8   
Target Milestone: ---   
Host: Target:
Build: Last reconfirmed:

Description dje 2014-11-17 19:39:46 UTC
From PR 17612:

#include <stdlib.h>

struct big { char foo[1 * 1024 * 1024 * 1024]; };

int
main ()
{
  struct big *p = malloc (sizeof (*p));
  return 0;
}

Printing *p takes forever.
Plus it's not interruptable.

This bug covers the "not interruptable" part.
Comment 1 dje 2014-11-17 20:00:58 UTC
I think what's taking awhile and is uninterruptable is computing repeated elements.
The computation proceeds passed "print elements".

E.g., change foo to 1M bytes and it still takes awhile, but it completes without taking "forever".

(gdb) set debug target 1
(gdb) p *p
target_thread_address_space (process 12972) = 1
native:target_xfer_partial (2, (null), 0x2dd1610, 0x0, 0x401ba8, 8) = 1, 8, bytes =
 10 10 60 f7 ff 7f 00 00
native:target_xfer_partial (2, (null), 0x7f63eadcc010, 0x0, 0x7ffff7601010, 1048576) = 1, 1048576, bytes =
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
$1 = {

[long uninterruptible pause here]

  foo =     '\000' <repeats 1048575 times>
}
(gdb) 

Then if I change foo to contain random text (but leave it still 1GB in size) up to "print elements" (default = 200) then it completes reasonably quickly.