More, hopefully helpful, information.
I ran BoostCalculatorSteps in gdb:
(gdb) run
Starting program: /home/dan/workspaceBugs/cucumber-cpp/build/examples/Calc/
BoostCalculatorSteps
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Listening on port 3902
Program received signal SIGSEGV, Segmentation fault.
0x0000000000561040 in cuke::internal::CukeEngineImpl::stepMatches(std::
string const&) const ()
(gdb) where
#0 0x0000000000561040 in
cuke::internal::CukeEngineImpl::stepMatches(std::string const&) const ()
#1 0x00000000005a891c in
cuke::internal::StepMatchesCommand::run(cuke::internal::CukeEngine*) const
()
#2 0x00000000005721f7 in
cuke::internal::WireProtocolHandler::handle(std::string const&) const ()
#3 0x000000000056b35c in
cuke::internal::SocketServer::processStream(boost::asio::basic_socket_iostream<boost::asio::ip::tcp,
boost::asio::stream_socket_service<boost::asio::ip::tcp> >&) ()
#4 0x000000000056b2cb in cuke::internal::SocketServer::acceptOnce() ()
#5 0x000000000055c9ba in acceptWireProtocol(int) ()
#6 0x000000000055cae5 in main ()
and some strace output:
.
.
.
write(2, "Listening on port ", 18Listening on port ) = 18
write(2, "3902", 43902) = 4
write(2, "\n", 1
) = 1
epoll_create(20000) = 3
timerfd_create(CLOCK_MONOTONIC, 0) = 4
eventfd2(0, 0) = 5
fcntl(5, F_SETFL, O_RDONLY|O_NONBLOCK) = 0
epoll_ctl(3, EPOLL_CTL_ADD, 5, {EPOLLIN|EPOLLERR|EPOLLET, {u32=22274160, u64
=22274160}}) = 0
write(5, "\1\0\0\0\0\0\0\0", 8) = 8
epoll_ctl(3, EPOLL_CTL_ADD, 4, {EPOLLIN|EPOLLERR, {u32=22274156, u64=
22274156}}) = 0
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 6
epoll_ctl(3, EPOLL_CTL_ADD, 6, {EPOLLIN|EPOLLPRI|EPOLLOUT|EPOLLERR|EPOLLHUP|
EPOLLET, {u32=22274416, u64=22274416}}) = 0
setsockopt(6, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
bind(6, {sa_family=AF_INET, sin_port=htons(3902), sin_addr=inet_addr(
"0.0.0.0")}, 16) = 0
listen(6, 1) = 0
epoll_create(20000) = 7
timerfd_create(CLOCK_MONOTONIC, 0) = 8
eventfd2(0, 0) = 9
fcntl(9, F_SETFL, O_RDONLY|O_NONBLOCK) = 0
epoll_ctl(7, EPOLL_CTL_ADD, 9, {EPOLLIN|EPOLLERR|EPOLLET, {u32=22274800, u64
=22274800}}) = 0
write(9, "\1\0\0\0\0\0\0\0", 8) = 8
epoll_ctl(7, EPOLL_CTL_ADD, 8, {EPOLLIN|EPOLLERR, {u32=22274796, u64=
22274796}}) = 0
accept(6, 0, NULL) = 10
epoll_ctl(7, EPOLL_CTL_ADD, 10, {EPOLLIN|EPOLLPRI|EPOLLOUT|EPOLLERR|EPOLLHUP
|EPOLLET, {u32=22274896, u64=22274896}}) = 0
recvmsg(10, {msg_name(0)=NULL, msg_iov(1)=[{
"[\"begin_scenario\"]\n\372\377\177\0\0t\272\344Me\177\0\0"..., 504}],msg_controllen
=0, msg_flags=0}, 0) = 19
sendmsg(10, {msg_name(0)=NULL, msg_iov(1)=[{"[\"success\"]", 11}],msg_controllen
=0, msg_flags=0}, MSG_NOSIGNAL) = 11
sendmsg(10, {msg_name(0)=NULL, msg_iov(1)=[{"\n", 1}], msg_controllen=0,msg_flags
=0}, MSG_NOSIGNAL) = 1
recvmsg(10, {msg_name(0)=NULL, msg_iov(1)=[{
"[\"step_matches\",{\"name_to_match\""..., 504}], msg_controllen=0,msg_flags
=0}, 0) = 73
recvmsg(10, {msg_name(0)=NULL, msg_iov(1)=[{
"\n\"step_matches\",{\"name_to_match\""..., 504}], msg_controllen=0,msg_flags
=0}, 0) = 1
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV (core dumped) +++
[1]+ Terminated build/examples/Calc/BoostCalculatorSteps
Segmentation fault (core dumped)
Thanks,
Dan
Post by Daniel RasmussenYes! You have both detected my hacking. I should have started with the
original problem which reappeared when I fixed my hacked example to be a
Scenario instead of a Scenario Ouline,
cucumber examples/Calc/CalcFeatures/features/
# language: en
Feature: Addition
In order to avoid silly mistakes
As a math idiot
I want to be told the sum of two numbers
Scenario: Add two numbers #
examples/Calc/CalcFeatures/features/addition.feature:7
undefined method `strip' for nil:NilClass (NoMethodError)
/usr/lib/ruby/vendor_ruby/cucumber/wire_support/wire_packet.rb:8:in `parse
'
/usr/lib/ruby/vendor_ruby/cucumber/wire_support/connection.rb:45:in
`fetch_data_from_socket'
/usr/lib/ruby/vendor_ruby/cucumber/wire_support/connection.rb:20:in
`call_remote'
/usr/lib/ruby/vendor_ruby/cucumber/wire_support/request_handler.rb:10:in `
execute'
/usr/lib/ruby/vendor_ruby/cucumber/wire_support/wire_protocol/requests.rb:12:in
`execute'
/usr/lib/ruby/vendor_ruby/cucumber/wire_support/wire_protocol.rb:9:in
`step_matches'
/usr/lib/ruby/vendor_ruby/cucumber/wire_support/wire_language.rb:37:in `
step_matches'
/usr/lib/ruby/vendor_ruby/cucumber/wire_support/wire_language.rb:37:in `map'
/usr/lib/ruby/vendor_ruby/cucumber/wire_support/wire_language.rb:37:in
`step_matches'
/usr/lib/ruby/vendor_ruby/cucumber/runtime/support_code.rb:153:in `matches
'
/usr/lib/ruby/vendor_ruby/cucumber/runtime/support_code.rb:152:in `map'
/usr/lib/ruby/vendor_ruby/cucumber/runtime/support_code.rb:152:in `matches'
/usr/lib/ruby/vendor_ruby/cucumber/runtime/support_code.rb:128:in `
step_match'
/usr/lib/ruby/vendor_ruby/cucumber/runtime.rb:65:in `step_match'
/usr/lib/ruby/vendor_ruby/cucumber/ast/step_invocation.rb:82:in
`find_step_match!'
/usr/lib/ruby/vendor_ruby/cucumber/ast/step_invocation.rb:55:in `invoke'
/usr/lib/ruby/vendor_ruby/cucumber/ast/step_invocation.rb:38:in `accept'
/usr/lib/ruby/vendor_ruby/cucumber/ast/tree_walker.rb:99:in `visit_step'
/usr/lib/ruby/vendor_ruby/cucumber/ast/tree_walker.rb:163:in `broadcast'
/usr/lib/ruby/vendor_ruby/cucumber/ast/tree_walker.rb:98:in `visit_step'
/usr/lib/ruby/vendor_ruby/cucumber/ast/step_collection.rb:15:in `accept'
/usr/lib/ruby/vendor_ruby/cucumber/ast/step_collection.rb:14:in `each'
/usr/lib/ruby/vendor_ruby/cucumber/ast/step_collection.rb:14:in `accept'
/usr/lib/ruby/vendor_ruby/cucumber/ast/tree_walker.rb:93:in `visit_steps'
/usr/lib/ruby/vendor_ruby/cucumber/ast/tree_walker.rb:163:in `broadcast'
/usr/lib/ruby/vendor_ruby/cucumber/ast/tree_walker.rb:92:in `visit_steps'
/usr/lib/ruby/vendor_ruby/cucumber/ast/scenario.rb:55:in `accept'
/usr/lib/ruby/vendor_ruby/cucumber/runtime.rb:79:in `with_hooks'
/usr/lib/ruby/vendor_ruby/cucumber/runtime.rb:95:in `before_and_after'
/usr/lib/ruby/vendor_ruby/cucumber/runtime.rb:78:in `with_hooks'
/usr/lib/ruby/vendor_ruby/cucumber/runtime/support_code.rb:115:in `call'
/usr/lib/ruby/vendor_ruby/cucumber/runtime/support_code.rb:115:in `around'
/usr/lib/ruby/vendor_ruby/cucumber/language_support/language_methods.rb:13
:in `around'
/usr/lib/ruby/vendor_ruby/cucumber/language_support/language_methods.rb:95:in
`call'
/usr/lib/ruby/vendor_ruby/cucumber/language_support/language_methods.rb:95:in
`execute_around'
/usr/lib/ruby/vendor_ruby/cucumber/language_support/language_methods.rb:12
:in `around'
/usr/lib/ruby/vendor_ruby/cucumber/runtime/support_code.rb:114:in `around'
/usr/lib/ruby/vendor_ruby/cucumber/runtime/support_code.rb:112:in `call'
/usr/lib/ruby/vendor_ruby/cucumber/runtime/support_code.rb:112:in `around'
/usr/lib/ruby/vendor_ruby/cucumber/runtime.rb:90:in `around'
/usr/lib/ruby/vendor_ruby/cucumber/runtime.rb:77:in `with_hooks'
/usr/lib/ruby/vendor_ruby/cucumber/ast/scenario.rb:53:in `accept'
/usr/lib/ruby/vendor_ruby/cucumber/ast/scenario.rb:108:in `with_visitor'
/usr/lib/ruby/vendor_ruby/cucumber/ast/scenario.rb:47:in `accept'
/usr/lib/ruby/vendor_ruby/cucumber/ast/tree_walker.rb:51:in
`visit_feature_element'
/usr/lib/ruby/vendor_ruby/cucumber/ast/tree_walker.rb:163:in `broadcast'
/usr/lib/ruby/vendor_ruby/cucumber/ast/tree_walker.rb:50:in
`visit_feature_element'
/usr/lib/ruby/vendor_ruby/cucumber/ast/feature.rb:43:in `accept'
/usr/lib/ruby/vendor_ruby/cucumber/ast/feature.rb:42:in `each'
/usr/lib/ruby/vendor_ruby/cucumber/ast/feature.rb:42:in `accept'
/usr/lib/ruby/vendor_ruby/cucumber/ast/tree_walker.rb:20:in
`visit_feature'
/usr/lib/ruby/vendor_ruby/cucumber/ast/tree_walker.rb:163:in `broadcast'
/usr/lib/ruby/vendor_ruby/cucumber/ast/tree_walker.rb:19:in `visit_feature'
/usr/lib/ruby/vendor_ruby/cucumber/ast/features.rb:29:in `accept'
/usr/lib/ruby/vendor_ruby/cucumber/ast/features.rb:17:in `each'
/usr/lib/ruby/vendor_ruby/cucumber/ast/features.rb:17:in `each'
/usr/lib/ruby/vendor_ruby/cucumber/ast/features.rb:28:in `accept'
/usr/lib/ruby/vendor_ruby/cucumber/ast/tree_walker.rb:14:in `
visit_features'
/usr/lib/ruby/vendor_ruby/cucumber/ast/tree_walker.rb:163:in `broadcast'
/usr/lib/ruby/vendor_ruby/cucumber/ast/tree_walker.rb:13:in
`visit_features'
/usr/lib/ruby/vendor_ruby/cucumber/runtime.rb:45:in `run!'
/usr/lib/ruby/vendor_ruby/cucumber/cli/main.rb:38:in `execute!'
/usr/lib/ruby/vendor_ruby/cucumber/cli/main.rb:15:in `execute'
/usr/bin/cucumber:14
[1]+ Segmentation fault (core dumped)
build/examples/Calc/BoostCalculatorSteps
ruby --version
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
Thanks for the help.
Dan
Post by Daniel RasmussenPost by Daniel RasmussenWhich is not what I expected. Any suggestions on how to debug this
(either
Post by Daniel Rasmussenmy installation, test, or expectation)?
It looks like you have altered the "addition.feature" file (I can't
see the 25+15=40 example in the original file). As Aslak wrote, if you
remove the Examples section, you should not use a Scenario Outline (or
no scenarios will be run).
--
Paolo
--
-- Rules --
1) Please prefix the subject with [Ruby], [JVM] or [JS].
2) Please use interleaved answers http://en.wikipedia.org/wiki/Posting_style#Interleaved_style
3) If you have a question, don't reply to an existing message. Start a new topic instead.
You received this message because you are subscribed to the Google Groups Cukes group. To post to this group, send email to cukes-/JYPxA39Uh5TLH3MbocFF+G/***@public.gmane.org To unsubscribe from this group, send email to cukes+***@googlegroups.com. For more options, visit this group at https://groups.google.com/d/forum/cukes?hl=en