hoe-debugging 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rspec +2 -0
- data/CHANGELOG.rdoc +5 -0
- data/{README.rdoc → LICENSE} +1 -42
- data/Manifest.txt +16 -1
- data/README.md +42 -0
- data/Rakefile +10 -6
- data/lib/hoe/debugging.rb +8 -2
- data/spec/files/sample.log +974 -0
- data/spec/files/sample.supp +84 -0
- data/spec/files/test_project/Gemfile +7 -0
- data/spec/files/test_project/History.txt +6 -0
- data/spec/files/test_project/Manifest.txt +8 -0
- data/spec/files/test_project/README.txt +6 -0
- data/spec/files/test_project/Rakefile +28 -0
- data/spec/files/test_project/ext/test_project/extconf.rb +3 -0
- data/spec/files/test_project/ext/test_project/test_project.c +20 -0
- data/spec/files/test_project/test/test_test_project.rb +11 -0
- data/spec/hoe_debugging_exit_code_spec.rb +45 -0
- data/spec/hoe_debugging_valgrind_helper_spec.rb +98 -0
- data/spec/spec_helper.rb +3 -0
- metadata +65 -28
@@ -0,0 +1,84 @@
|
|
1
|
+
{
|
2
|
+
<insert_a_suppression_name_here>
|
3
|
+
Memcheck:Addr4
|
4
|
+
fun:glob_helper
|
5
|
+
fun:ruby_glob0
|
6
|
+
fun:rb_push_glob
|
7
|
+
fun:vm_call_method
|
8
|
+
fun:vm_exec_core
|
9
|
+
fun:vm_exec
|
10
|
+
fun:rb_yield
|
11
|
+
fun:rb_ary_each
|
12
|
+
fun:vm_call_method
|
13
|
+
fun:vm_exec_core
|
14
|
+
fun:vm_exec
|
15
|
+
fun:vm_call0
|
16
|
+
fun:rb_iterate
|
17
|
+
fun:rb_block_call
|
18
|
+
fun:enum_find_all
|
19
|
+
fun:vm_call_method
|
20
|
+
fun:vm_exec_core
|
21
|
+
fun:vm_exec
|
22
|
+
fun:vm_call0
|
23
|
+
fun:rb_class_new_instance
|
24
|
+
fun:vm_call_method
|
25
|
+
fun:vm_exec_core
|
26
|
+
fun:vm_exec
|
27
|
+
fun:vm_call0
|
28
|
+
}
|
29
|
+
{
|
30
|
+
<insert_a_suppression_name_here>
|
31
|
+
Memcheck:Addr4
|
32
|
+
fun:glob_helper
|
33
|
+
fun:ruby_glob0
|
34
|
+
fun:ruby_brace_expand.constprop.7
|
35
|
+
fun:rb_push_glob
|
36
|
+
fun:vm_call_method
|
37
|
+
fun:vm_exec_core
|
38
|
+
fun:vm_exec
|
39
|
+
fun:any_iter_i
|
40
|
+
fun:vm_yield_with_cfunc
|
41
|
+
fun:rb_yield
|
42
|
+
fun:rb_ary_each
|
43
|
+
fun:vm_call0
|
44
|
+
fun:rb_iterate
|
45
|
+
fun:rb_block_call
|
46
|
+
fun:enum_any
|
47
|
+
fun:vm_call_method
|
48
|
+
fun:vm_exec_core
|
49
|
+
fun:vm_exec
|
50
|
+
fun:vm_call0
|
51
|
+
fun:rb_class_new_instance
|
52
|
+
fun:vm_call_method
|
53
|
+
fun:vm_exec_core
|
54
|
+
fun:vm_exec
|
55
|
+
fun:rb_iseq_eval
|
56
|
+
}
|
57
|
+
{
|
58
|
+
<insert_a_suppression_name_here>
|
59
|
+
Memcheck:Addr4
|
60
|
+
fun:glob_helper
|
61
|
+
fun:glob_helper
|
62
|
+
fun:ruby_glob0
|
63
|
+
fun:ruby_brace_expand.constprop.7
|
64
|
+
fun:rb_push_glob
|
65
|
+
fun:vm_call_method
|
66
|
+
fun:vm_exec_core
|
67
|
+
fun:vm_exec
|
68
|
+
fun:any_iter_i
|
69
|
+
fun:vm_yield_with_cfunc
|
70
|
+
fun:rb_yield
|
71
|
+
fun:rb_ary_each
|
72
|
+
fun:vm_call0
|
73
|
+
fun:rb_iterate
|
74
|
+
fun:rb_block_call
|
75
|
+
fun:enum_any
|
76
|
+
fun:vm_call_method
|
77
|
+
fun:vm_exec_core
|
78
|
+
fun:vm_exec
|
79
|
+
fun:vm_call0
|
80
|
+
fun:rb_class_new_instance
|
81
|
+
fun:vm_call_method
|
82
|
+
fun:vm_exec_core
|
83
|
+
fun:vm_exec
|
84
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require "rubygems"
|
4
|
+
require "hoe"
|
5
|
+
|
6
|
+
require 'rake/extensiontask'
|
7
|
+
|
8
|
+
# Hoe.plugin :bundler
|
9
|
+
# Hoe.plugin :compiler
|
10
|
+
Hoe.plugin :debugging
|
11
|
+
# Hoe.plugin :gem_prelude_sucks
|
12
|
+
# Hoe.plugin :gemspec
|
13
|
+
# Hoe.plugin :git
|
14
|
+
# Hoe.plugin :inline
|
15
|
+
# Hoe.plugin :minitest
|
16
|
+
# Hoe.plugin :racc
|
17
|
+
# Hoe.plugin :rcov
|
18
|
+
# Hoe.plugin :rdoc
|
19
|
+
|
20
|
+
HOE = Hoe.spec "test_project" do |spec|
|
21
|
+
developer("Hoe Debuggin", "hoedebuggin@example.com")
|
22
|
+
license("MIT")
|
23
|
+
spec.version = "1.0.0"
|
24
|
+
end
|
25
|
+
|
26
|
+
Rake::ExtensionTask.new("test_project")
|
27
|
+
|
28
|
+
# vim: syntax=ruby
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#include <ruby.h>
|
2
|
+
|
3
|
+
static VALUE bad_method()
|
4
|
+
{
|
5
|
+
int *foo = malloc(sizeof(int));
|
6
|
+
*foo = 0 ;
|
7
|
+
|
8
|
+
printf("Hoedebuggingtest: running %d\n", *(foo + 512));
|
9
|
+
printf("Hoedebuggingtest: running %d\n", *(foo + 1024));
|
10
|
+
printf("Hoedebuggingtest: running %d\n", *(foo + 2048));
|
11
|
+
return Qnil;
|
12
|
+
}
|
13
|
+
|
14
|
+
|
15
|
+
void Init_test_project()
|
16
|
+
{
|
17
|
+
VALUE mHoedebuggingtest = rb_define_module("Hoedebuggingtest");
|
18
|
+
|
19
|
+
rb_define_singleton_method(mHoedebuggingtest, "bad_method", bad_method, 0);
|
20
|
+
}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require_relative "spec_helper.rb"
|
2
|
+
|
3
|
+
describe "exit code" do
|
4
|
+
def sh command
|
5
|
+
Rake.sh command, verbose: false
|
6
|
+
end
|
7
|
+
|
8
|
+
let(:test_dir) { File.join(File.dirname(__FILE__), "files/test_project") }
|
9
|
+
|
10
|
+
before do
|
11
|
+
Bundler.with_clean_env do
|
12
|
+
Dir.chdir test_dir do
|
13
|
+
sh "gem install bundler > #{logfile} 2>&1"
|
14
|
+
sh "bundle install >> #{logfile} 2>&1"
|
15
|
+
sh "bundle exec rake compile >> #{logfile} 2>&1"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context "from a good run" do
|
21
|
+
let(:logfile) { "good-run.log" }
|
22
|
+
it "is zero" do
|
23
|
+
Bundler.with_clean_env do
|
24
|
+
Dir.chdir test_dir do
|
25
|
+
system "bundle exec rake test:valgrind TESTOPTS='--name /notexist/' >> #{logfile} 2>&1"
|
26
|
+
exitcode = $?
|
27
|
+
expect(exitcode.success?).to(be_truthy, File.read(logfile))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "from a bad run" do
|
34
|
+
let(:logfile) { "good-run.log" }
|
35
|
+
it "is nonzero" do
|
36
|
+
Bundler.with_clean_env do
|
37
|
+
Dir.chdir test_dir do
|
38
|
+
system "bundle exec rake test:valgrind >> #{logfile} 2>&1"
|
39
|
+
exitcode = $?
|
40
|
+
expect(exitcode.success?).to(be_falsey, File.read(logfile))
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require_relative "spec_helper.rb"
|
2
|
+
|
3
|
+
describe Hoe::Debugging::ValgrindHelper do
|
4
|
+
let(:logfile) { File.join File.dirname(__FILE__), "files/sample.log" }
|
5
|
+
let(:suppfile) { File.join File.dirname(__FILE__), "files/sample.supp" }
|
6
|
+
let(:klass) { Hoe::Debugging::ValgrindHelper }
|
7
|
+
|
8
|
+
let(:suppressions_directory) { "tmp/suppressions" }
|
9
|
+
before { FileUtils.rm_rf suppressions_directory }
|
10
|
+
|
11
|
+
describe "#initialize" do
|
12
|
+
it "requires a project_name argument" do
|
13
|
+
expect { klass.new }.to raise_error ArgumentError
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "#directory" do
|
18
|
+
it { expect(klass.new("myproj") .directory).to eq "suppressions" }
|
19
|
+
it { expect(klass.new("myproj", :directory => "foo").directory).to eq "foo" }
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#project_name" do
|
23
|
+
it { expect(klass.new("myproj").project_name).to eq "myproj" }
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "#version_matches" do
|
27
|
+
it "returns possible suppression file matches in order of specificity" do
|
28
|
+
helper = klass.new "myproj"
|
29
|
+
allow(helper).to receive(:formatted_ruby_version) { "ruby-1.9.3.194" }
|
30
|
+
expect(helper.version_matches).to eq %w[ruby-1.9.3.194 ruby-1.9.3 ruby-1.9]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "#parse_suppressions_from" do
|
35
|
+
it "generates a de-duped set of suppressions" do
|
36
|
+
helper = klass.new "myproj"
|
37
|
+
suppressions = helper.parse_suppressions_from logfile
|
38
|
+
|
39
|
+
expected = File.read suppfile
|
40
|
+
|
41
|
+
expect(suppressions).to eq expected
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "#save_suppressions_from" do
|
46
|
+
it "saves a file simply containing the ruby" do
|
47
|
+
helper = klass.new "myproj", :directory => suppressions_directory
|
48
|
+
actual_file = helper.save_suppressions_from logfile
|
49
|
+
expect(actual_file).to match(/myproj_ruby-.*\.supp/)
|
50
|
+
|
51
|
+
actual = File.read actual_file
|
52
|
+
expected = File.read suppfile
|
53
|
+
expect(actual).to eq expected
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "#matching_suppression_file" do
|
58
|
+
context "there are multiple matches" do
|
59
|
+
it "returns the best match" do
|
60
|
+
helper = klass.new "myproj", :directory => suppressions_directory
|
61
|
+
exact_match = File.join(suppressions_directory, "myproj_#{helper.formatted_ruby_version}.supp")
|
62
|
+
inexact_match = File.join(suppressions_directory, "myproj_#{helper.version_matches[1]}.999999999.supp")
|
63
|
+
FileUtils.mkdir_p suppressions_directory
|
64
|
+
FileUtils.touch inexact_match
|
65
|
+
FileUtils.touch exact_match
|
66
|
+
expect(helper.matching_suppression_file).to eq exact_match
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
context "there is one inexact match" do
|
72
|
+
it "returns it" do
|
73
|
+
helper = klass.new "myproj", :directory => suppressions_directory
|
74
|
+
inexact_match = File.join(suppressions_directory, "myproj_#{helper.version_matches[1]}.999999999.supp")
|
75
|
+
FileUtils.mkdir_p suppressions_directory
|
76
|
+
FileUtils.touch inexact_match
|
77
|
+
expect(helper.matching_suppression_file).to eq inexact_match
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context "there is one exact match" do
|
82
|
+
it "returns it" do
|
83
|
+
helper = klass.new "myproj", :directory => suppressions_directory
|
84
|
+
exact_match = File.join(suppressions_directory, "myproj_#{helper.formatted_ruby_version}.supp")
|
85
|
+
FileUtils.mkdir_p suppressions_directory
|
86
|
+
FileUtils.touch exact_match
|
87
|
+
expect(helper.matching_suppression_file).to eq exact_match
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
context "there are zero matches" do
|
92
|
+
it "returns nil" do
|
93
|
+
helper = klass.new "myproj", :directory => suppressions_directory
|
94
|
+
expect(helper.matching_suppression_file).to be_nil
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hoe-debugging
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Barnette
|
@@ -9,22 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2017-01-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: bundler
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
20
|
+
version: '0'
|
21
21
|
type: :development
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - "
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
27
|
+
version: '0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: hoe
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -40,21 +40,21 @@ dependencies:
|
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '3.1'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
43
|
+
name: hoe-bundler
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - "
|
46
|
+
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: '
|
48
|
+
version: '0'
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - "
|
53
|
+
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: '
|
55
|
+
version: '0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
|
-
name: hoe-
|
57
|
+
name: hoe-gemspec
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
60
|
- - ">="
|
@@ -68,7 +68,7 @@ dependencies:
|
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
|
-
name: hoe-
|
71
|
+
name: hoe-git
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
74
|
- - ">="
|
@@ -82,7 +82,7 @@ dependencies:
|
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
|
-
name:
|
85
|
+
name: rake-compiler
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
88
|
- - ">="
|
@@ -95,18 +95,40 @@ dependencies:
|
|
95
95
|
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: rspec
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - "~>"
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: 3.5.0
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - "~>"
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: 3.5.0
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: rdoc
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - "~>"
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '4.0'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - "~>"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '4.0'
|
98
126
|
description: |-
|
99
|
-
A Hoe plugin to help you debug your C extensions. This plugin provides
|
100
|
-
<tt>test:gdb</tt> and <tt>test:valgrind</tt> tasks (plus a few
|
101
|
-
variants).
|
102
|
-
|
103
|
-
See the Hoe::Debugging module for a few configuration options.
|
127
|
+
A Hoe plugin to help you debug your C extensions. This plugin provides `test:gdb` and `test:valgrind` tasks (plus a few variants).
|
104
128
|
|
105
|
-
|
106
|
-
available in your <tt>PATH</tt>.
|
129
|
+
See the `Hoe::Debugging` module for a few configuration options.
|
107
130
|
|
108
|
-
|
109
|
-
ruby legend, {Mike Dalessio}[http://mike.daless.io].
|
131
|
+
This plugin expects you to have `gdb` and `valgrind` available in your `PATH`.
|
110
132
|
email:
|
111
133
|
- jbarnette@rubyforge.org
|
112
134
|
- mike.dalessio@gmail.com
|
@@ -115,13 +137,28 @@ extensions: []
|
|
115
137
|
extra_rdoc_files:
|
116
138
|
- CHANGELOG.rdoc
|
117
139
|
- Manifest.txt
|
118
|
-
- README.
|
140
|
+
- README.md
|
119
141
|
files:
|
142
|
+
- ".rspec"
|
120
143
|
- CHANGELOG.rdoc
|
144
|
+
- LICENSE
|
121
145
|
- Manifest.txt
|
122
|
-
- README.
|
146
|
+
- README.md
|
123
147
|
- Rakefile
|
124
148
|
- lib/hoe/debugging.rb
|
149
|
+
- spec/files/sample.log
|
150
|
+
- spec/files/sample.supp
|
151
|
+
- spec/files/test_project/Gemfile
|
152
|
+
- spec/files/test_project/History.txt
|
153
|
+
- spec/files/test_project/Manifest.txt
|
154
|
+
- spec/files/test_project/README.txt
|
155
|
+
- spec/files/test_project/Rakefile
|
156
|
+
- spec/files/test_project/ext/test_project/extconf.rb
|
157
|
+
- spec/files/test_project/ext/test_project/test_project.c
|
158
|
+
- spec/files/test_project/test/test_test_project.rb
|
159
|
+
- spec/hoe_debugging_exit_code_spec.rb
|
160
|
+
- spec/hoe_debugging_valgrind_helper_spec.rb
|
161
|
+
- spec/spec_helper.rb
|
125
162
|
homepage: http://github.com/jbarnette/hoe-debugging
|
126
163
|
licenses:
|
127
164
|
- MIT
|
@@ -129,7 +166,7 @@ metadata: {}
|
|
129
166
|
post_install_message:
|
130
167
|
rdoc_options:
|
131
168
|
- "--main"
|
132
|
-
- README.
|
169
|
+
- README.md
|
133
170
|
require_paths:
|
134
171
|
- lib
|
135
172
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -144,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
181
|
version: '0'
|
145
182
|
requirements: []
|
146
183
|
rubyforge_project:
|
147
|
-
rubygems_version: 2.
|
184
|
+
rubygems_version: 2.6.8
|
148
185
|
signing_key:
|
149
186
|
specification_version: 4
|
150
187
|
summary: A Hoe plugin to help you debug your C extensions
|