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.

Reply via email to