int main(int argc, char * argv[]) { PIN_Init(argc, argv); if (!KnobPort.Value().empty()) { DEBUG_CONNECTION_INFO info; if (!PIN_GetDebugConnectionInfo(&info)) { std::cerr << "Error from PIN_GetDebugConnectionInfo()" << std::endl; return 1; } if (info._type != DEBUG_CONNECTION_TYPE_TCP_SERVER) { std::cerr << "Unexpected connection type from PIN_GetDebugConnectionInfo()" << std::endl; return 1; } std::ofstream out(KnobPort.Value().c_str()); out << std::dec << info._tcpServer._tcpPort; } INS_AddInstrumentFunction(InstrumentIns, 0); PIN_StartProgram(); return 0; }
static bool LaunchGdb() { // Ask Pin for the TCP port that it is listening on. GDB needs to // connect to this port via the "target remote" command. // DEBUG_CONNECTION_INFO info; PIN_GetDebugConnectionInfo(&info); std::ofstream outf(KnobOut.Value().c_str()); outf << "set remotetimeout " << KnobTimeout.Value() << "\n"; outf << "target remote :" << info._tcpServer._tcpPort << "\n"; outf.close(); // The "makefile" should launch GDB when we write the output file above. // Wait for GDB to launch and connect. // return PIN_WaitForDebuggerToConnect(1000*KnobTimeout.Value()); }