crosswalk が gdb で追えない
先ほど書いた記事のエラーログですが、
[0626/133627:ERROR:command_buffer_proxy_impl.cc(151)] Could not send GpuCommandBufferMsg_Initialize.
該当箇所は、こんなのです。
bool result; if (!Send(new GpuCommandBufferMsg_Initialize( route_id_, handle, &result, &capabilities_))) { LOG(ERROR) << "Could not send GpuCommandBufferMsg_Initialize."; return false; }
GpuCommandBufferMsg_Initialize なんですが、 gtags で引っかからないし、grepしても class 定義がない。 しかも、gdb で step 実行すると、すり抜けるという謎現象。 最適化が問題かと思ったんですが、 この class がマクロで定義されているようなんですね。
IPC_SYNC_MESSAGE_ROUTED1_2(GpuCommandBufferMsg_Initialize, base::SharedMemoryHandle /* shared_state */, bool /* result */, gpu::Capabilities /* capabilities */)
↑これを性的に静的に追っていくと、↓に行き着きます。
#define IPC_SYNC_ROUTED_DECL(msg_class, in_cnt, out_cnt, in_list, out_list) \ class IPC_MESSAGE_EXPORT msg_class : public IPC::SyncMessage { \ public: \ typedef IPC::SyncMessageSchemaSchema; \ typedef Schema::ReplyParam ReplyParam; \ typedef Schema::SendParam SendParam; \ enum { ID = IPC_MESSAGE_ID() }; \ msg_class(int32 routing_id \ IPC_COMMA_OR_##in_cnt(IPC_COMMA_##out_cnt) \ IPC_TYPE_IN_##in_cnt in_list \ IPC_COMMA_AND_##in_cnt(IPC_COMMA_##out_cnt) \ IPC_TYPE_OUT_##out_cnt out_list); \ virtual ~msg_class(); \ static bool ReadSendParam(const Message* msg, Schema::SendParam* p); \ static bool ReadReplyParam( \ const Message* msg, \ TupleTypes ::ValueTuple* p); \ static void Log(std::string* name, const Message* msg, std::string* l); \ IPC_SYNC_MESSAGE_METHODS_##out_cnt \ };
コード上は、そんな class が存在しないので、gtags でも追えないし、gdb でもひっかからないと。
どうしたらいいんでしょうかね・・・。
ていうか、なんでこんなことするかなー。
デバッガで追えないような実装するとか、何考えてんだろ、馬鹿なの?死ぬの?。