Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GDB MI command -thread-info takes about 1 second to complete #61

Closed
dosvidos opened this issue Mar 31, 2016 · 1 comment
Closed

GDB MI command -thread-info takes about 1 second to complete #61

dosvidos opened this issue Mar 31, 2016 · 1 comment
Assignees

Comments

@dosvidos
Copy link

I'm using GDB 7.10 from NDK r11b for Windows 64-bit and I've noticed that -thread-info command takes a lot of time for processing compared to other GDB MI commands - more than one second on Nexus 7 2013 device running API21 and bit less on a newer hardware. I suppose that's due to the fact that it also reports the top stack frame for each thread of execution. That's unfortunate, because sometimes front-end needs to get thread names really quick, and 1 second delay hurts UX. Maybe there's a faster way to query for a thread names?
Call -thread-info for each thread id in a loop is even slower, though.

2016-03-31 21:36:20.1611[GDB] cmd: "357-thread-info"
2016-03-31 21:36:20.8566[GDB] stdout: 357^done,threads=[{id="31",target-id="Thread 5962",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="30",target-id="Thread 5961",frame={level="0",addr="0x4071cc2c",func="__pselect6",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="29",target-id="Thread 5960",frame={level="0",addr="0x4071cc2c",func="__pselect6",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="28",target-id="Thread 5959",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="27",target-id="Thread 5958",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="26",target-id="Thread 5957",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="25",target-id="Thread 5956",frame={level="0",addr="0x4071c2bc",func="nanosleep",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="24",target-id="Thread 5955",frame={level="0",addr="0x6e15e542",func="??",args=[],from="sysroot\symbols32\system\vendor\lib\libglcore.so"},state="stopped",core="0"},{id="23",target-id="Thread 5954",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="0"},{id="22",target-id="Thread 5953",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="21",target-id="Thread 5952",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="0"},{id="20",target-id="Thread 5950",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="19",target-id="Thread 5949",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="0"},{id="18",target-id="Thread 5948",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="0"},{id="17",target-id="Thread 5946",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="16",target-id="Thread 5945",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="0"},{id="15",target-id="Thread 5944",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="0"},{id="14",target-id="Thread 5943",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="13",target-id="Thread 5951",frame={level="0",addr="0x4071c6b8",func="__ioctl",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="12",target-id="Thread 5940",frame={level="0",addr="0x4071c6b8",func="__ioctl",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="0"},{id="11",target-id="Thread 4290",frame={level="0",addr="0x4071c868",func="__epoll_pwait",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="10",target-id="Thread 4289",frame={level="0",addr="0x57033264",func="UParticleSystemComponent::TickComponent",args=[{name="this",value="0x80066000"},{name="DeltaTime",value="0.0320000015"},{name="TickType",value="LEVELTICK_All"},{name="ThisTickFunction",value="0x0"}],file="C:\UnrealEngine-4.10\Engine\Source\Runtime\Engine\Private\Particles/ParticleComponents.cpp",fullname="C:\UnrealEngine-4.10\Engine\Source\Runtime\Engine\Private\Particles\ParticleComponents.cpp",line="3577"},state="stopped",core="1"},{id="9",target-id="Thread 4253",frame={level="0",addr="0x4071c6b8",func="__ioctl",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="8",target-id="Thread 4252",frame={level="0",addr="0x4071c6b8",func="__ioctl",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="7",target-id="Thread 4251",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="6",target-id="Thread 4250",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="0"},{id="5",target-id="Thread 4249",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="4",target-id="Thread 4248",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="0"},{id="3",target-id="Thread 4247",frame={level="0",addr="0x4071c2fc",func="recvmsg",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="2",target-id="Thread 4246",frame={level="0",addr="0x4071bfe8",func="__rt_sigtimedwait",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="1",target-id="Thread 4241",frame={level="0",addr="0x4071c868",func="__epoll_pwait",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"}],current-thread-id="10"
2016-03-31 21:36:41.8705[GDB] cmd: "358-thread-info"
2016-03-31 21:36:42.5285[GDB] stdout: 358^done,threads=[{id="31",target-id="Thread 5962",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="30",target-id="Thread 5961",frame={level="0",addr="0x4071cc2c",func="__pselect6",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="29",target-id="Thread 5960",frame={level="0",addr="0x4071cc2c",func="__pselect6",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="28",target-id="Thread 5959",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="27",target-id="Thread 5958",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="26",target-id="Thread 5957",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="25",target-id="Thread 5956",frame={level="0",addr="0x4071c2bc",func="nanosleep",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="24",target-id="Thread 5955",frame={level="0",addr="0x6e15e542",func="??",args=[],from="sysroot\symbols32\system\vendor\lib\libglcore.so"},state="stopped",core="0"},{id="23",target-id="Thread 5954",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="0"},{id="22",target-id="Thread 5953",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="21",target-id="Thread 5952",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="0"},{id="20",target-id="Thread 5950",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="19",target-id="Thread 5949",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="0"},{id="18",target-id="Thread 5948",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="0"},{id="17",target-id="Thread 5946",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="16",target-id="Thread 5945",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="0"},{id="15",target-id="Thread 5944",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="0"},{id="14",target-id="Thread 5943",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="13",target-id="Thread 5951",frame={level="0",addr="0x4071c6b8",func="__ioctl",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="12",target-id="Thread 5940",frame={level="0",addr="0x4071c6b8",func="__ioctl",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="0"},{id="11",target-id="Thread 4290",frame={level="0",addr="0x4071c868",func="__epoll_pwait",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="10",target-id="Thread 4289",frame={level="0",addr="0x57033264",func="UParticleSystemComponent::TickComponent",args=[{name="this",value="0x80066000"},{name="DeltaTime",value="0.0320000015"},{name="TickType",value="LEVELTICK_All"},{name="ThisTickFunction",value="0x0"}],file="C:\UnrealEngine-4.10\Engine\Source\Runtime\Engine\Private\Particles/ParticleComponents.cpp",fullname="C:\UnrealEngine-4.10\Engine\Source\Runtime\Engine\Private\Particles\ParticleComponents.cpp",line="3577"},state="stopped",core="1"},{id="9",target-id="Thread 4253",frame={level="0",addr="0x4071c6b8",func="__ioctl",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="8",target-id="Thread 4252",frame={level="0",addr="0x4071c6b8",func="__ioctl",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="7",target-id="Thread 4251",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="6",target-id="Thread 4250",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="0"},{id="5",target-id="Thread 4249",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="4",target-id="Thread 4248",frame={level="0",addr="0x406f260c",func="syscall",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="0"},{id="3",target-id="Thread 4247",frame={level="0",addr="0x4071c2fc",func="recvmsg",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="2",target-id="Thread 4246",frame={level="0",addr="0x4071bfe8",func="__rt_sigtimedwait",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"},{id="1",target-id="Thread 4241",frame={level="0",addr="0x4071c868",func="__epoll_pwait",args=[],from="sysroot\symbols32\system\lib\libc.so"},state="stopped",core="1"}],current-thread-id="10"

@jmgao
Copy link
Contributor

jmgao commented Apr 27, 2016

I don't think there's much we can do about this, maybe file an upstream bug/feature request? The gdb documentation suggests for a related operation that you should cache the results. If you use async, I think you should be able to notice and query threads for their name as soon as you get a thread-created notification.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants