Bug 17613 - printing of large objects not interruptable
Summary: printing of large objects not interruptable
Status: NEW
Alias: None
Product: gdb
Classification: Unclassified
Component: gdb (show other bugs)
Version: 7.8
: P2 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-11-17 19:39 UTC by dje
Modified: 2014-11-17 20:00 UTC (History)
0 users

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
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.