grpc-native-debug 1.60.0.pre1-x86-linux
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +230 -0
- data/platform.rb +19 -0
- data/symbols/grpc-1.60.0.pre1-x86-linux-ruby-2.7.dbg +0 -0
- data/symbols/grpc-1.60.0.pre1-x86-linux-ruby-3.0.dbg +0 -0
- data/symbols/grpc-1.60.0.pre1-x86-linux-ruby-3.1.dbg +0 -0
- data/symbols/grpc-1.60.0.pre1-x86-linux-ruby-3.2.dbg +0 -0
- data/version.rb +19 -0
- metadata +50 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 9c263f6a3e982f9a5dc93b52c4ebe1c6f44669a5f6e9ee2dae3805cfefe0fbcb
|
4
|
+
data.tar.gz: ba25d5c93ae9d435cf86dfaf55d8b19e0947296447598b6c001ae5e18f7af724
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1c8726a894114c3d06a52e3614e189783d03175e313f9ac32f7663fdb6a20a68816a896784a0a48dcf26ab51b8160a9c7c88cd8d43f06807f1baf0cf4fcc8c25
|
7
|
+
data.tar.gz: f59c9ed0e08de8828c880f9fa1c6ffea782ee98d6530887596158e7a787ea38651121fbd19f4eb8a3ea525f14c66f47198fcacdc341fb60f9f302996550b6fac
|
data/README.md
ADDED
@@ -0,0 +1,230 @@
|
|
1
|
+
This package contains debug symbols that can be useful for debugging
|
2
|
+
applications that use grpc pre-compiled binary gems.
|
3
|
+
|
4
|
+
An example of a pre-compiled binary gem is `grpc-1.58.0-x86_64-linux.gem`
|
5
|
+
(as opposed to a source-built gem like `grpc-1.58.0.gem`).
|
6
|
+
|
7
|
+
`grpc-native-debug` gems contain debug symbols which complement the
|
8
|
+
native libraries in these grpc binary gems. After fetching and unpacking a
|
9
|
+
proper `grpc-native-debug` gem, one can load the correct `.dbg` symbol file to
|
10
|
+
debug their grpc application.
|
11
|
+
|
12
|
+
# Background
|
13
|
+
|
14
|
+
grpc-ruby pre-compiled binary gems are *released with debug symbols stripped*.
|
15
|
+
As a consequence, if you are to examine a grpc stack trace in a debugger
|
16
|
+
for example, a lot of information will initially be missing.
|
17
|
+
|
18
|
+
# Using grpc-native-debug
|
19
|
+
|
20
|
+
## Finding the correct grpc-native-debug gem
|
21
|
+
|
22
|
+
Each `grpc-native-debug` gem is *one-to-one* with a `grpc` gem. Specifically:
|
23
|
+
|
24
|
+
- The version of a `grpc-native-debug` gem **must match the version** of the `grpc`
|
25
|
+
gem.
|
26
|
+
|
27
|
+
- The ruby platform of a `grpc-native-debug` gem **must match the ruby platform** of
|
28
|
+
the `grpc` gem.
|
29
|
+
|
30
|
+
So for example, if you are debugging `grpc-1.60.1-x86_64-linux.gem`, then you
|
31
|
+
need to fetch `grpc-native-debug-1.60.1-x86_64-linux.gem`.
|
32
|
+
|
33
|
+
## Finding the correct .dbg symbol file
|
34
|
+
|
35
|
+
Each `grpc-native-debug` gem has a top-level `symbols` directory containing
|
36
|
+
symbol files ending in `.dbg`.
|
37
|
+
|
38
|
+
`grpc` binary gems are shipped with multiple native libraries. There is one
|
39
|
+
native library for each supported *minor version* of ruby. As such,
|
40
|
+
`grpc-native-debug` gems have exactly one `.dbg` file for each native library
|
41
|
+
in the corresponding `grpc` gem.
|
42
|
+
|
43
|
+
If you unpack a `grpc-native-debug` gem and look at the `symbols`
|
44
|
+
directory, you might see something like this:
|
45
|
+
|
46
|
+
```
|
47
|
+
grpc-native-debug-1.60.1-x86_64-linux/symbols/grpc-1.60.1-x86_64-linux-ruby-3.0.dbg
|
48
|
+
grpc-native-debug-1.60.1-x86_64-linux/symbols/grpc-1.60.1-x86_64-linux-ruby-2.7.dbg
|
49
|
+
grpc-native-debug-1.60.1-x86_64-linux/symbols/grpc-1.60.1-x86_64-linux-ruby-3.2.dbg
|
50
|
+
grpc-native-debug-1.60.1-x86_64-linux/symbols/grpc-1.60.1-x86_64-linux-ruby-3.1.dbg
|
51
|
+
```
|
52
|
+
|
53
|
+
In each of these `.dbg` files, the `ruby-<major>-<minor>` portion of the string
|
54
|
+
indicates which ruby version it's supposed to be used with.
|
55
|
+
|
56
|
+
So for example, if you are debugging `grpc-1.60.1-x86_64-linux.gem` on ruby-3.0, then you
|
57
|
+
need to use symbol file
|
58
|
+
`grpc-native-debug-1.60.1-x86_64-linux/symbols/grpc-1.60.1-x86_64-linux-ruby-3.0.dbg`.
|
59
|
+
|
60
|
+
## Putting symbols into action (example gdb workflow)
|
61
|
+
|
62
|
+
There are a variety of ways to use these symbols.
|
63
|
+
|
64
|
+
As a toy example, suppose we are running an application under gdb using:
|
65
|
+
|
66
|
+
- ruby-3.0
|
67
|
+
|
68
|
+
- grpc-1.60.1.x86_64-linux.gem
|
69
|
+
|
70
|
+
At first, in gdb we might dump a grpc-ruby stack trace looking
|
71
|
+
something like this:
|
72
|
+
|
73
|
+
```
|
74
|
+
(gdb) bt
|
75
|
+
#0 0x00007ffff7926e56 in epoll_wait (epfd=5, events=0x7ffff3cb4144, maxevents=100, timeout=-1) at ../sysdeps/unix/sysv/linux/epoll_wait.c:30
|
76
|
+
#1 0x00007ffff383eb9e in ?? () from /home/.rvm/gems/ruby-3.0.0/gems/grpc-1.60.1-x86_64-linux/src/ruby/lib/grpc/3.0/grpc_c.so
|
77
|
+
#2 0x00007ffff355e002 in ?? () from /home/.rvm/gems/ruby-3.0.0/gems/grpc-1.60.1-x86_64-linux/src/ruby/lib/grpc/3.0/grpc_c.so
|
78
|
+
#3 0x00007ffff38466e2 in ?? () from /home/.rvm/gems/ruby-3.0.0/gems/grpc-1.60.1-x86_64-linux/src/ruby/lib/grpc/3.0/grpc_c.so
|
79
|
+
#4 0x00007ffff35ba2ea in ?? () from /home/.rvm/gems/ruby-3.0.0/gems/grpc-1.60.1-x86_64-linux/src/ruby/lib/grpc/3.0/grpc_c.so
|
80
|
+
#5 0x00007ffff34abf6b in ?? () from /home/.rvm/gems/ruby-3.0.0/gems/grpc-1.60.1-x86_64-linux/src/ruby/lib/grpc/3.0/grpc_c.so
|
81
|
+
#6 0x00007ffff7c67ca7 in rb_nogvl (func=0x7ffff34abed3, data1=0x0, ubf=<optimized out>, data2=<optimized out>, flags=<optimized out>) at thread.c:1669
|
82
|
+
#7 0x00007ffff34ab110 in ?? () from /home/.rvm/gems/ruby-3.0.0/gems/grpc-1.60.1-x86_64-linux/src/ruby/lib/grpc/3.0/grpc_c.so
|
83
|
+
#8 0x00007ffff7c6780c in thread_do_start (th=0x555555ad16e0) at thread.c:769
|
84
|
+
#9 thread_start_func_2 (th=th@entry=0x555555ad16e0, stack_start=<optimized out>) at thread.c:822
|
85
|
+
#10 0x00007ffff7c679a6 in thread_start_func_1 (th_ptr=<optimized out>) at /home/.rvm/src/ruby-3.0.0/thread_pthread.c:994
|
86
|
+
#11 0x00007ffff78a63ec in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:444
|
87
|
+
#12 0x00007ffff7926a4c in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
|
88
|
+
```
|
89
|
+
|
90
|
+
We could take the following steps to get more debug info:
|
91
|
+
|
92
|
+
<h3>1) Fetch the correct grpc-native-debug gem</h3>
|
93
|
+
|
94
|
+
```
|
95
|
+
cd /home
|
96
|
+
gem fetch grpc-native-debug-1.60.1.x86_64-linux.gem
|
97
|
+
gem unpack grpc-native-debug-1.60.1.x86_64-linux.gem
|
98
|
+
```
|
99
|
+
|
100
|
+
(note again the version and platform of `grpc-native-debug` must match the `grpc` gem)
|
101
|
+
|
102
|
+
<h3>2) Load debug symbols (for ruby-3.0)</h3>
|
103
|
+
|
104
|
+
```
|
105
|
+
(gdb) info sharedlibrary
|
106
|
+
From To Syms Read Shared Object Library
|
107
|
+
...
|
108
|
+
0x00007ffff3497450 0x00007ffff3a61912 Yes (*) /home/.rvm/gems/ruby-3.0.0/gems/grpc-1.60.1-x86_64-linux/src/ruby/lib/grpc/3.0/grpc_c.so
|
109
|
+
0x00007ffff3e78730 0x00007ffff3ea60df Yes (*) /home/.rvm/gems/ruby-3.0.0/gems/google-protobuf-3.24.4-x86_64-linux/lib/google/3.0/protobuf_c.so
|
110
|
+
(*): Shared library is missing debugging information.
|
111
|
+
(gdb) add-symbol-file /home/grpc-native-debug-1.60.1-x86_64-linux/symbols/grpc-1.60.1-x86_64-linux-ruby-3.0.dbg 0x00007ffff3497450
|
112
|
+
add symbol table from file "/home/grpc-native-debug-1.60.1-x86_64-linux/symbols/grpc-1.60.1-x86_64-linux-ruby-3.0.dbg" at
|
113
|
+
.text_addr = 0x7ffff3497450
|
114
|
+
(y or n) y
|
115
|
+
Reading symbols from /home/grpc-native-debug-1.60.1-x86_64-linux/symbols/grpc-1.60.1-x86_64-linux-ruby-3.0.dbg...
|
116
|
+
(gdb)
|
117
|
+
```
|
118
|
+
|
119
|
+
Our stack trace might look more like this now:
|
120
|
+
|
121
|
+
```
|
122
|
+
(gdb) bt
|
123
|
+
#0 0x00007ffff7926e56 in epoll_wait (epfd=5, events=0x7ffff3cb4144, maxevents=100, timeout=-1) at ../sysdeps/unix/sysv/linux/epoll_wait.c:30
|
124
|
+
#1 0x00007ffff383eb9e in do_epoll_wait (ps=0x555555ad1690, deadline=...) at src/core/lib/iomgr/ev_epoll1_linux.cc:723
|
125
|
+
#2 pollset_work (ps=0x555555ad1690, worker_hdl=0x0, deadline=...) at src/core/lib/iomgr/ev_epoll1_linux.cc:1038
|
126
|
+
#3 0x00007ffff355e002 in pollset_work (pollset=<optimized out>, worker=<optimized out>, deadline=...) at src/core/lib/iomgr/ev_posix.cc:249
|
127
|
+
#4 0x00007ffff38466e2 in grpc_pollset_work (pollset=<optimized out>, worker=<optimized out>, deadline=...) at src/core/lib/iomgr/pollset.cc:48
|
128
|
+
#5 0x00007ffff35ba2ea in cq_next (cq=0x555555ad1510, deadline=..., reserved=<optimized out>) at src/core/lib/surface/completion_queue.cc:1043
|
129
|
+
#6 0x00007ffff34abf6b in run_poll_channels_loop_no_gil (arg=arg@entry=0x0) at ../../../../src/ruby/ext/grpc/rb_channel.c:663
|
130
|
+
#7 0x00007ffff7c67ca7 in rb_nogvl (func=0x7ffff34abed3 <run_poll_channels_loop_no_gil>, data1=0x0, ubf=<optimized out>, data2=<optimized out>, flags=flags@entry=0) at thread.c:1669
|
131
|
+
#8 0x00007ffff7c68138 in rb_thread_call_without_gvl (func=<optimized out>, data1=<optimized out>, ubf=<optimized out>, data2=<optimized out>) at thread.c:1785
|
132
|
+
#9 0x00007ffff34ab110 in run_poll_channels_loop (arg=<optimized out>) at ../../../../src/ruby/ext/grpc/rb_channel.c:734
|
133
|
+
#10 0x00007ffff7c6780c in thread_do_start (th=0x555555ad16e0) at thread.c:769
|
134
|
+
#11 thread_start_func_2 (th=th@entry=0x555555ad16e0, stack_start=<optimized out>) at thread.c:822
|
135
|
+
#12 0x00007ffff7c679a6 in thread_start_func_1 (th_ptr=<optimized out>) at /home/.rvm/src/ruby-3.0.0/thread_pthread.c:994
|
136
|
+
#13 0x00007ffff78a63ec in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:444
|
137
|
+
#14 0x00007ffff7926a4c in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
|
138
|
+
```
|
139
|
+
|
140
|
+
This is better, but if we try to examine a frame closely we'll notice
|
141
|
+
that source file information is still missing:
|
142
|
+
|
143
|
+
```
|
144
|
+
(gdb) up
|
145
|
+
#1 0x00007ffff383eb9e in do_epoll_wait (ps=0x555555ad1690, deadline=...) at src/core/lib/iomgr/ev_epoll1_linux.cc:723
|
146
|
+
723 src/core/lib/iomgr/ev_epoll1_linux.cc: No such file or directory.
|
147
|
+
(gdb) list
|
148
|
+
718 in src/core/lib/iomgr/ev_epoll1_linux.cc
|
149
|
+
(gdb)
|
150
|
+
```
|
151
|
+
|
152
|
+
<h3>3) Resolve source files</h3>
|
153
|
+
|
154
|
+
First, we fetch the *source* `grpc` gem at the **exact same version** of our binary
|
155
|
+
`grpc` gem:
|
156
|
+
|
157
|
+
```
|
158
|
+
cd /home
|
159
|
+
gem fetch grpc-1.60.1.gem
|
160
|
+
gem unpack grpc-1.60.1.gem
|
161
|
+
```
|
162
|
+
|
163
|
+
Now we can load those sources in gdb:
|
164
|
+
|
165
|
+
```
|
166
|
+
(gdb) dir /home/grpc-1.60.1
|
167
|
+
Source directories searched: /home/grpc-1.60.1:$cdir:$cwd
|
168
|
+
(gdb)
|
169
|
+
```
|
170
|
+
|
171
|
+
Our stack frame will might look more like this now:
|
172
|
+
|
173
|
+
```
|
174
|
+
(gdb) list
|
175
|
+
warning: Source file is more recent than executable.
|
176
|
+
718 int timeout = poll_deadline_to_millis_timeout(deadline);
|
177
|
+
719 if (timeout != 0) {
|
178
|
+
720 GRPC_SCHEDULING_START_BLOCKING_REGION;
|
179
|
+
721 }
|
180
|
+
722 do {
|
181
|
+
723 r = epoll_wait(g_epoll_set.epfd, g_epoll_set.events, MAX_EPOLL_EVENTS,
|
182
|
+
724 timeout);
|
183
|
+
725 } while (r < 0 && errno == EINTR);
|
184
|
+
726 if (timeout != 0) {
|
185
|
+
727 GRPC_SCHEDULING_END_BLOCKING_REGION;
|
186
|
+
(gdb)
|
187
|
+
```
|
188
|
+
|
189
|
+
But if we move up a few stack frames we might *still* be missing
|
190
|
+
some source information:
|
191
|
+
|
192
|
+
```
|
193
|
+
(gdb) up
|
194
|
+
#6 0x00007ffff34abf6b in run_poll_channels_loop_no_gil (arg=arg@entry=0x0) at ../../../../src/ruby/ext/grpc/rb_channel.c:663
|
195
|
+
663 ../../../../src/ruby/ext/grpc/rb_channel.c: No such file or directory.
|
196
|
+
```
|
197
|
+
|
198
|
+
A portion of the grpc-ruby native extension is built from a sub-directory:
|
199
|
+
`src/ruby/ext/grpc`. So we also need to add that sub-directory, to fix this:
|
200
|
+
|
201
|
+
```
|
202
|
+
(gdb) dir /home/grpc-1.60.1/src/ruby/ext/grpc
|
203
|
+
Source directories searched: /home/grpc-1.60.1/src/ruby/ext/grpc:/home/grpc-1.60.1:$cdir:$cwd
|
204
|
+
```
|
205
|
+
|
206
|
+
Note the additional info:
|
207
|
+
|
208
|
+
```
|
209
|
+
(gdb) list
|
210
|
+
warning: Source file is more recent than executable.
|
211
|
+
658 gpr_mu_lock(&global_connection_polling_mu);
|
212
|
+
659 gpr_cv_broadcast(&global_connection_polling_cv);
|
213
|
+
660 gpr_mu_unlock(&global_connection_polling_mu);
|
214
|
+
661
|
215
|
+
662 for (;;) {
|
216
|
+
663 event = grpc_completion_queue_next(
|
217
|
+
664 g_channel_polling_cq, gpr_inf_future(GPR_CLOCK_REALTIME), NULL);
|
218
|
+
665 if (event.type == GRPC_QUEUE_SHUTDOWN) {
|
219
|
+
666 break;
|
220
|
+
667 }
|
221
|
+
(gdb)
|
222
|
+
```
|
223
|
+
|
224
|
+
# Support
|
225
|
+
|
226
|
+
grpc-native-debug currently only supports:
|
227
|
+
|
228
|
+
- ruby platforms: `x86_64-linux` and `x86-linux`
|
229
|
+
|
230
|
+
- grpc >= 1.60.0
|
data/platform.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# Copyright 2015 gRPC authors.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module GRPC
|
16
|
+
module NativeDebug
|
17
|
+
PLATFORM = 'x86-linux'
|
18
|
+
end
|
19
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/version.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# Copyright 2015 gRPC authors.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module GRPC
|
16
|
+
module NativeDebug
|
17
|
+
VERSION = '1.60.0.pre1'
|
18
|
+
end
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: grpc-native-debug
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.60.0.pre1
|
5
|
+
platform: x86-linux
|
6
|
+
authors:
|
7
|
+
- grpc Authors
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-11-13 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Debug symbols to compliment the native libraries in pre-compiled Ruby
|
14
|
+
gRPC binary gems
|
15
|
+
email: grpc-io@googlegroups.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- README.md
|
21
|
+
- platform.rb
|
22
|
+
- symbols/grpc-1.60.0.pre1-x86-linux-ruby-2.7.dbg
|
23
|
+
- symbols/grpc-1.60.0.pre1-x86-linux-ruby-3.0.dbg
|
24
|
+
- symbols/grpc-1.60.0.pre1-x86-linux-ruby-3.1.dbg
|
25
|
+
- symbols/grpc-1.60.0.pre1-x86-linux-ruby-3.2.dbg
|
26
|
+
- version.rb
|
27
|
+
homepage: https://github.com/google/grpc/tree/master/src/ruby/nativedebug
|
28
|
+
licenses:
|
29
|
+
- Apache-2.0
|
30
|
+
metadata: {}
|
31
|
+
post_install_message:
|
32
|
+
rdoc_options: []
|
33
|
+
require_paths:
|
34
|
+
- lib
|
35
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ">"
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 1.3.1
|
45
|
+
requirements: []
|
46
|
+
rubygems_version: 3.4.1
|
47
|
+
signing_key:
|
48
|
+
specification_version: 4
|
49
|
+
summary: Debug symbols for the native library in Ruby gRPC
|
50
|
+
test_files: []
|