Sadly, I'm still stuck. I don't know enough C++ to be able to diagnose this further... :-(
On Tuesday, November 15, 2016 at 2:01:50 PM UTC-5, [email protected] wrote: > > Ok: > > *(gdb) handle SIG36 noprint* > *Signal Stop Print Pass to program Description* > *SIG36 No No Yes Real-time event 36* > *(gdb) run* > *Starting program: /.../minfail* > *[Thread debugging using libthread_db enabled]* > *D1115 13:59:40.187940393 34391 env_linux.c:77] Warning: > insecure environment read function 'getenv' used* > *[New Thread 0x7ffff6fcc700 (LWP 34394)]* > *[New Thread 0x7ffff65cb700 (LWP 34395)]* > *[New Thread 0x7ffff5bca700 (LWP 34396)]* > *[New Thread 0x7ffff51c9700 (LWP 34397)]* > *[New Thread 0x7ffff47c8700 (LWP 34398)]* > *[New Thread 0x7ffff3dc7700 (LWP 34399)]* > *[New Thread 0x7ffff33c6700 (LWP 34400)]* > *[New Thread 0x7ffff29c5700 (LWP 34401)]* > *[New Thread 0x7ffff1fc4700 (LWP 34402)]* > *[New Thread 0x7ffff15c3700 (LWP 34403)]* > *[New Thread 0x7ffff0bc2700 (LWP 34404)]* > *[New Thread 0x7ffff01c1700 (LWP 34405)]* > *[New Thread 0x7fffef7c0700 (LWP 34406)]* > *[New Thread 0x7fffeedbf700 (LWP 34407)]* > *[New Thread 0x7fffee3be700 (LWP 34408)]* > *[New Thread 0x7fffed9bd700 (LWP 34409)]* > *pure virtual method called* > *terminate called without an active exception* > > *Program received signal SIGABRT, Aborted.* > *0x00000035ce0325e5 in raise () from /lib64/libc.so.6* > *(gdb) bt* > *#0 0x00000035ce0325e5 in raise () from /lib64/libc.so.6* > *#1 0x00000035ce033dc5 in abort () from /lib64/libc.so.6* > *#2 0x00000035d4cbea7d in __gnu_cxx::__verbose_terminate_handler() () > from /usr/lib64/libstdc++.so.6* > *#3 0x00000035d4cbcbd6 in ?? () from /usr/lib64/libstdc++.so.6* > *#4 0x00000035d4cbcc03 in std::terminate() () from > /usr/lib64/libstdc++.so.6* > *#5 0x00000035d4cbd55f in __cxa_pure_virtual () from > /usr/lib64/libstdc++.so.6* > *#6 0x00007ffff76e3f7a in > grpc::CompletionQueue::AsyncNextInternal(void**, bool*, gpr_timespec) () > from /.../lib/libgrpc++.so.1* > *#7 0x000000000040919f in grpc::CompletionQueue::Next > [_ZN4grpc15Completion...] (this=0x628fa0, tag=0x7fffffffe1e8, > ok=0x7fffffffe1e7) at > .../include/grpc++/impl/codegen/completion_queue.h:148* > *#8 0x00000000004085ca in main [main] (argc=1, argv=0x7fffffffe3a8) at > minfail.cc:95* > *(gdb)* > > > On Tuesday, November 15, 2016 at 1:55:48 PM UTC-5, Craig Tiller wrote: >> >> You probably want to first do 'handle SIG36 noprint' to let gdb pass the >> (totally legitimate) signal to the application. >> >> On Tue, Nov 15, 2016 at 8:56 AM <[email protected]> wrote: >> >>> >>> Hi all, >>> >>> I've created a tiny code sample that is based off the hello world async >>> greeter example. I keep getting a "pure virtual method called" in the >>> grpc_completion_queue_next() function, and I'm having a hard time >>> understanding why. What am I doing wrong? >>> >>> I've included the proto file, C++ code and gdb output... (the program is >>> both a client or a server, if you give it a command line value of "c" it >>> acts as a client). >>> >>> Thanks in advance! >>> >>> PROTO FILE >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> *syntax = "proto3";package helloworld;service Greeter{ rpc SayHello >>> (HelloRequest) returns (stream HelloReply) {}}message HelloRequest{ >>> string message = 1;}message HelloReply{ string reply = 1;}* >>> >>> >>> C++ CODE >>> >>> *#include <iostream>* >>> *#include <string>* >>> *#include <grpc++/grpc++.h>* >>> *#include "minfail.grpc.pb.h"* >>> >>> *using namespace std;* >>> *using namespace helloworld;* >>> >>> *class CallData {* >>> *public:* >>> * CallData(Greeter::AsyncService* service, >>> grpc::ServerCompletionQueue* cq) : service_(service), cq_(cq), >>> responder_(&ctx_), status_(CREATE) {* >>> * Proceed();* >>> * }* >>> >>> * void Proceed() {* >>> * if (status_ == CREATE) {* >>> * status_ = PROCESS;* >>> * service_->RequestSayHello(&ctx_, &request_, &responder_, >>> cq_, cq_, this);* >>> * } else if (status_ == PROCESS) {* >>> * new CallData(service_, cq_);* >>> * reply_.set_reply("hello " + request_.message());* >>> * responder_.Write (reply_, this);* >>> * responder_.Finish(grpc::Status::OK, this);* >>> * status_ = FINISH;* >>> * } else {* >>> * GPR_ASSERT(status_ == FINISH);* >>> * delete this;* >>> * }* >>> * }* >>> >>> *private:* >>> * HelloRequest request_;* >>> * HelloReply reply_;* >>> * grpc::ServerAsyncWriter<HelloReply> responder_;* >>> >>> * enum CallStatus { CREATE, PROCESS, FINISH };* >>> * CallStatus status_;* >>> * grpc::ServerContext ctx_;* >>> * grpc::ServerCompletionQueue* cq_;* >>> * Greeter::AsyncService* service_;* >>> *};* >>> >>> *class GreeterClient* >>> *{* >>> *public:* >>> * GreeterClient (shared_ptr <grpc::Channel> channel)* >>> * : stub_ (Greeter::NewStub (channel)) {}* >>> * string* >>> * SayHello (const string &user) {* >>> * HelloRequest request;* >>> * request.set_message (user);* >>> * grpc::ClientContext context;* >>> * unique_ptr <grpc::ClientReader <HelloReply>> reader >>> (stub_->SayHello (&context, request));* >>> * HelloReply reply;* >>> * while (reader -> Read (&reply)) {* >>> * cout << "SayHello returns " << reply.reply() << "\n";* >>> * }* >>> * grpc::Status status = reader -> Finish();* >>> * if (status.ok()) {* >>> * return (reply.reply());* >>> * }* >>> * return ("<RPC failed>");* >>> * }* >>> >>> *private:* >>> * unique_ptr<Greeter::Stub> stub_;* >>> *};* >>> >>> *int* >>> *main (int argc, char **argv)* >>> *{* >>> * string server_address ("0.0.0.0:50051 <http://0.0.0.0:50051>");* >>> >>> * if (argc == 2 && argv [1][0] == 'c') {* >>> * GreeterClient greeter(grpc::CreateChannel (server_address, >>> grpc::InsecureChannelCredentials()));* >>> * cout << "Sending world...\n";* >>> * cout << "Response is " << greeter.SayHello ("world") << "\n";* >>> * } else {* >>> * unique_ptr<grpc::ServerCompletionQueue> cq;* >>> * Greeter::AsyncService service;* >>> * unique_ptr<grpc::Server> server;* >>> >>> * grpc::ServerBuilder builder;* >>> >>> * builder.AddListeningPort(server_address, >>> grpc::InsecureServerCredentials());* >>> * builder.RegisterService(&service);* >>> * cq = builder.AddCompletionQueue();* >>> * server = builder.BuildAndStart();* >>> >>> * new CallData(&service, cq.get());* >>> * CallData* tag; // uniquely identifies a request.* >>> * bool ok;* >>> * while (true) {* >>> * GPR_ASSERT(cq->Next((void **)&tag, &ok));* >>> * GPR_ASSERT(ok);* >>> * tag->Proceed();* >>> * }* >>> >>> * server->Shutdown();* >>> * cq->Shutdown();* >>> * }* >>> *}* >>> >>> and run / GDB output: >>> >>> >>> >>> >>> >>> *$ ./minfailD1115 11:45:47.919769500 24264 env_linux.c:77] >>> Warning: insecure environment read function 'getenv' usedpure virtual >>> method calledterminate called without an active exceptionAborted (core >>> dumped)* >>> >>> *$ gdb ./minfail* >>> *... elided ...* >>> *Program received signal SIG36, Real-time event 36.* >>> *0x00000035ce0e8cec in epoll_pwait () from /lib64/libc.so.6* >>> *(gdb) bt* >>> *#0 0x00000035ce0e8cec in epoll_pwait () from /lib64/libc.so.6* >>> *#1 0x00007ffff76f8d4a in ?? () from /.../lib/libgrpc++.so.1* >>> *#2 0x00007ffff76f91a6 in ?? () from /.../lib/libgrpc++.so.1* >>> *#3 0x00007ffff770d61b in grpc_completion_queue_next () from >>> /.../lib/libgrpc++.so.1* >>> *#4 0x00007ffff76e3f20 in >>> grpc::CompletionQueue::AsyncNextInternal(void**, bool*, gpr_timespec) () >>> from /.../lib/libgrpc++.so.1* >>> *#5 0x000000000040919f in grpc::CompletionQueue::Next >>> [_ZN4grpc15Completion...] (this=0x628fa0, tag=0x7fffffffe1e8, >>> ok=0x7fffffffe1e7) at >>> .../include/grpc++/impl/codegen/completion_queue.h:148* >>> *#6 0x00000000004085ca in main [main] (argc=1, argv=0x7fffffffe3a8) at >>> minfail.cc:95* >>> *(gdb)* >>> >>> Any help greatly appreciated! >>> >>> Cheers, >>> -RK >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "grpc.io" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To post to this group, send email to [email protected]. >>> Visit this group at https://groups.google.com/group/grpc-io. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/grpc-io/34f059a0-f825-4aa3-a725-84fb61e46b1f%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/grpc-io/34f059a0-f825-4aa3-a725-84fb61e46b1f%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- You received this message because you are subscribed to the Google Groups "grpc.io" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/grpc-io. To view this discussion on the web visit https://groups.google.com/d/msgid/grpc-io/4abd99f3-8402-4e79-9b15-bd5b5c4862d2%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
