hoe-debugging 1.0.5 → 1.1.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.
- data/.gemtest +0 -0
- data/CHANGELOG.rdoc +5 -0
- data/README.rdoc +7 -1
- data/Rakefile +9 -1
- data/lib/hoe/debugging.rb +115 -9
- metadata +94 -13
data/.gemtest
ADDED
File without changes
|
data/CHANGELOG.rdoc
CHANGED
data/README.rdoc
CHANGED
@@ -27,6 +27,10 @@ ruby legend, {Mike Dalessio}[http://mike.daless.io].
|
|
27
27
|
$ rake test:gdb
|
28
28
|
$ rake test:valgrind
|
29
29
|
|
30
|
+
# if you've got valgrind warnings you've deemed OK to suppress
|
31
|
+
$ rake test:valgrind:suppression
|
32
|
+
$ rake test:valgrind # this runs, suppressing the errors previously emitted by valgrind
|
33
|
+
|
30
34
|
|
31
35
|
== Installation
|
32
36
|
|
@@ -35,11 +39,13 @@ ruby legend, {Mike Dalessio}[http://mike.daless.io].
|
|
35
39
|
|
36
40
|
== License
|
37
41
|
|
42
|
+
(The MIT License)
|
43
|
+
|
38
44
|
Copyright 2009
|
39
45
|
|
40
46
|
* John Barnette (jbarnette@rubyforge.org)
|
41
47
|
* {Aaron Patterson}[http://tenderlovemaking.com/]
|
42
|
-
* {Mike Dalessio}[http://mike.daless.io]
|
48
|
+
* {Mike Dalessio}[http://mike.daless.io] (mike.dalessio@gmail.com)
|
43
49
|
|
44
50
|
Permission is hereby granted, free of charge, to any person obtaining
|
45
51
|
a copy of this software and associated documentation files (the
|
data/Rakefile
CHANGED
@@ -3,13 +3,21 @@ require "hoe"
|
|
3
3
|
|
4
4
|
Hoe.plugin :git
|
5
5
|
Hoe.plugin :gemspec
|
6
|
+
Hoe.plugin :bundler
|
6
7
|
|
7
8
|
Hoe.spec "hoe-debugging" do
|
8
9
|
developer "John Barnette", "jbarnette@rubyforge.org"
|
10
|
+
developer "Mike Dalessio", "mike.dalessio@gmail.com"
|
9
11
|
|
10
12
|
self.extra_rdoc_files = FileList["*.rdoc"]
|
11
13
|
self.history_file = "CHANGELOG.rdoc"
|
12
14
|
self.readme_file = "README.rdoc"
|
13
15
|
|
14
|
-
|
16
|
+
license "MIT"
|
17
|
+
|
18
|
+
extra_dev_deps << ["hoe", ">= 3.1"]
|
19
|
+
extra_dev_deps << ["rspec", "~> 2.0"]
|
20
|
+
extra_dev_deps << ["hoe-git", ">= 0"]
|
21
|
+
extra_dev_deps << ["hoe-gemspec", ">= 0"]
|
22
|
+
extra_dev_deps << ["hoe-bundler", ">= 0"]
|
15
23
|
end
|
data/lib/hoe/debugging.rb
CHANGED
@@ -10,7 +10,7 @@ class Hoe #:nodoc:
|
|
10
10
|
# * <tt>test:valgrind:mem0</tt>
|
11
11
|
|
12
12
|
module Debugging
|
13
|
-
VERSION = "1.0
|
13
|
+
VERSION = "1.1.0" #:nodoc:
|
14
14
|
|
15
15
|
##
|
16
16
|
# Optional: Used to add flags to GDB. [default: <tt>[]</tt>]
|
@@ -49,29 +49,135 @@ class Hoe #:nodoc:
|
|
49
49
|
cmd.join(' ')
|
50
50
|
end
|
51
51
|
|
52
|
+
def hoe_debugging_command
|
53
|
+
"#{hoe_debugging_ruby} #{hoe_debugging_make_test_cmd}"
|
54
|
+
end
|
55
|
+
|
56
|
+
def hoe_debugging_run_valgrind command, cmdline_options=[]
|
57
|
+
sh "valgrind #{cmdline_options.join(' ')} #{command}"
|
58
|
+
end
|
59
|
+
|
60
|
+
def hoe_debugging_check_for_suppression_file options
|
61
|
+
if suppression_file = hoe_debugging_valgrind_helper.matching_suppression_file
|
62
|
+
puts "NOTICE: using valgrind suppressions in #{suppression_file.inspect}"
|
63
|
+
options << "--suppressions=#{suppression_file}"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def hoe_debugging_valgrind_helper
|
68
|
+
@valgrind_helper ||= ValgrindHelper.new name
|
69
|
+
end
|
70
|
+
|
52
71
|
def define_debugging_tasks #:nodoc:
|
53
72
|
desc "Run the test suite under GDB."
|
54
73
|
task "test:gdb" do
|
55
|
-
sh "gdb #{gdb_options.join ' '} --args #{
|
74
|
+
sh "gdb #{gdb_options.join ' '} --args #{hoe_debugging_command}"
|
56
75
|
end
|
57
76
|
|
58
77
|
desc "Run the test suite under Valgrind."
|
59
78
|
task "test:valgrind" do
|
60
|
-
|
79
|
+
vopts = valgrind_options
|
80
|
+
hoe_debugging_check_for_suppression_file vopts
|
81
|
+
hoe_debugging_run_valgrind hoe_debugging_command, vopts
|
61
82
|
end
|
62
83
|
|
63
84
|
desc "Run the test suite under Valgrind with memory-fill."
|
64
85
|
task "test:valgrind:mem" do
|
65
|
-
|
66
|
-
|
67
|
-
|
86
|
+
vopts = valgrind_options + ["--freelist-vol=100000000", "--malloc-fill=6D", "--free-fill=66"]
|
87
|
+
hoe_debugging_check_for_suppression_file vopts
|
88
|
+
hoe_debugging_run_valgrind hoe_debugging_command, vopts
|
68
89
|
end
|
69
90
|
|
70
91
|
desc "Run the test suite under Valgrind with memory-zero."
|
71
92
|
task "test:valgrind:mem0" do
|
72
|
-
|
73
|
-
|
74
|
-
|
93
|
+
vopts = valgrind_options + ["--freelist-vol=100000000", "--malloc-fill=00", "--free-fill=00"]
|
94
|
+
hoe_debugging_check_for_suppression_file vopts
|
95
|
+
hoe_debugging_run_valgrind hoe_debugging_command, vopts
|
96
|
+
end
|
97
|
+
|
98
|
+
desc "Generate a valgrind suppression file for your test suite."
|
99
|
+
task "test:valgrind:suppression" do
|
100
|
+
vopts = valgrind_options + ["--gen-suppressions=all"]
|
101
|
+
Tempfile.open "hoe_debugging_valgrind_suppression_log" do |logfile|
|
102
|
+
hoe_debugging_run_valgrind "#{hoe_debugging_ruby} #{hoe_debugging_make_test_cmd} 2> #{logfile.path}", vopts
|
103
|
+
hoe_debugging_valgrind_helper.save_suppressions_from logfile.path
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
class ValgrindHelper
|
109
|
+
DEFAULT_DIRECTORY_NAME = "suppressions"
|
110
|
+
|
111
|
+
attr_accessor :directory, :project_name
|
112
|
+
|
113
|
+
def initialize project_name, options={}
|
114
|
+
@project_name = project_name
|
115
|
+
@directory = options[:directory] || DEFAULT_DIRECTORY_NAME
|
116
|
+
end
|
117
|
+
|
118
|
+
def formatted_ruby_version
|
119
|
+
engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"
|
120
|
+
%Q{#{engine}-#{RUBY_VERSION}.#{RUBY_PATCHLEVEL}}
|
121
|
+
end
|
122
|
+
|
123
|
+
def version_matches
|
124
|
+
matches = [formatted_ruby_version]
|
125
|
+
matches << formatted_ruby_version.split(".")[0,3].join(".")
|
126
|
+
matches << formatted_ruby_version.split(".")[0,2].join(".")
|
127
|
+
matches
|
128
|
+
end
|
129
|
+
|
130
|
+
def parse_suppressions_from logfile_name
|
131
|
+
suppressions = []
|
132
|
+
File.open logfile_name do |logfile|
|
133
|
+
suppression = nil
|
134
|
+
while ! logfile.eof? do
|
135
|
+
line = logfile.readline
|
136
|
+
if suppression.nil?
|
137
|
+
if line =~ /\<insert_a_suppression_name_here\>/
|
138
|
+
suppression = "{\n"
|
139
|
+
suppression << line
|
140
|
+
end
|
141
|
+
else
|
142
|
+
suppression << line
|
143
|
+
if line =~ /^\}$/
|
144
|
+
suppressions << suppression
|
145
|
+
suppression = nil
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
suppressions.uniq.join
|
151
|
+
end
|
152
|
+
|
153
|
+
def save_suppressions_from logfile, options={}
|
154
|
+
ensure_directory_exists
|
155
|
+
suppressions = parse_suppressions_from logfile
|
156
|
+
filename = File.join directory, "#{project_name}_#{formatted_ruby_version}.supp"
|
157
|
+
File.open(filename, "w") { |out| out.write suppressions }
|
158
|
+
filename
|
159
|
+
end
|
160
|
+
|
161
|
+
def matching_suppression_file
|
162
|
+
version_matches.each do |version_string|
|
163
|
+
matches = Dir[File.join(directory, "#{project_name}_#{version_string}*.supp")]
|
164
|
+
return matches[0] if matches[0]
|
165
|
+
end
|
166
|
+
nil
|
167
|
+
end
|
168
|
+
|
169
|
+
def valgrind command, options={}
|
170
|
+
sh "valgrind #{vopts.join ' '} #{hoe_debugging_ruby} #{hoe_debugging_make_test_cmd}"
|
171
|
+
end
|
172
|
+
|
173
|
+
private
|
174
|
+
|
175
|
+
def ensure_directory_exists
|
176
|
+
return if File.directory? directory
|
177
|
+
FileUtils.mkdir_p directory
|
178
|
+
File.open(File.join(directory, "README.txt"), "w") do |readme|
|
179
|
+
readme.puts "This directory contains valgrind suppression files generated by the hoe-debugging gem."
|
180
|
+
end
|
75
181
|
end
|
76
182
|
end
|
77
183
|
end
|
metadata
CHANGED
@@ -1,38 +1,113 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hoe-debugging
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- John Barnette
|
9
|
+
- Mike Dalessio
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2012-
|
13
|
+
date: 2012-09-26 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rdoc
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ~>
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '3.10'
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ~>
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '3.10'
|
14
31
|
- !ruby/object:Gem::Dependency
|
15
32
|
name: hoe
|
16
|
-
requirement:
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
17
34
|
none: false
|
18
35
|
requirements:
|
19
36
|
- - ! '>='
|
20
37
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
22
|
-
type: :
|
38
|
+
version: '3.1'
|
39
|
+
type: :development
|
23
40
|
prerelease: false
|
24
|
-
version_requirements:
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '3.1'
|
25
47
|
- !ruby/object:Gem::Dependency
|
26
|
-
name:
|
27
|
-
requirement:
|
48
|
+
name: rspec
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
28
50
|
none: false
|
29
51
|
requirements:
|
30
52
|
- - ~>
|
31
53
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
54
|
+
version: '2.0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '2.0'
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: hoe-git
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
name: hoe-gemspec
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
type: :development
|
88
|
+
prerelease: false
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: hoe-bundler
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
33
103
|
type: :development
|
34
104
|
prerelease: false
|
35
|
-
version_requirements:
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
36
111
|
description: ! 'A Hoe plugin to help you debug your C extensions. This plugin provides
|
37
112
|
|
38
113
|
<tt>test:gdb</tt> and <tt>test:valgrind</tt> tasks (plus a few
|
@@ -53,20 +128,23 @@ description: ! 'A Hoe plugin to help you debug your C extensions. This plugin pr
|
|
53
128
|
ruby legend, {Mike Dalessio}[http://mike.daless.io].'
|
54
129
|
email:
|
55
130
|
- jbarnette@rubyforge.org
|
131
|
+
- mike.dalessio@gmail.com
|
56
132
|
executables: []
|
57
133
|
extensions: []
|
58
134
|
extra_rdoc_files:
|
135
|
+
- CHANGELOG.rdoc
|
59
136
|
- Manifest.txt
|
60
137
|
- README.rdoc
|
61
|
-
- CHANGELOG.rdoc
|
62
138
|
files:
|
63
139
|
- CHANGELOG.rdoc
|
64
140
|
- Manifest.txt
|
65
141
|
- README.rdoc
|
66
142
|
- Rakefile
|
67
143
|
- lib/hoe/debugging.rb
|
144
|
+
- .gemtest
|
68
145
|
homepage: http://github.com/jbarnette/hoe-debugging
|
69
|
-
licenses:
|
146
|
+
licenses:
|
147
|
+
- MIT
|
70
148
|
post_install_message:
|
71
149
|
rdoc_options:
|
72
150
|
- --main
|
@@ -79,6 +157,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
79
157
|
- - ! '>='
|
80
158
|
- !ruby/object:Gem::Version
|
81
159
|
version: '0'
|
160
|
+
segments:
|
161
|
+
- 0
|
162
|
+
hash: -2243994185650622134
|
82
163
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
164
|
none: false
|
84
165
|
requirements:
|
@@ -87,7 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
87
168
|
version: '0'
|
88
169
|
requirements: []
|
89
170
|
rubyforge_project: hoe-debugging
|
90
|
-
rubygems_version: 1.8.
|
171
|
+
rubygems_version: 1.8.24
|
91
172
|
signing_key:
|
92
173
|
specification_version: 3
|
93
174
|
summary: A Hoe plugin to help you debug your C extensions
|