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] <javascript:>> 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] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> 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/9fc67ccf-1ebe-4441-9f46-cdcb9c2355e4%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to