У меня есть пользовательская сборка gcc / gdb, которую я пытаюсь интегрировать с плагином Eclipse CDT. Я создал собственный набор инструментов Eclipse и могу успешно с ним работать.
Сейчас я пытаюсь включить удаленную отладку, но в данный момент у меня ничего не получается.
Я создал подкласс конфигурации запуска, который расширяет AbstractCLaunchDelegate. В методе запуска у меня есть такой код:
public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException
{
// Get path to binary
IPath exePath = CDebugUtils.verifyProgramPath(configuration);
ICProject project = CDebugUtils.verifyCProject(configuration);
IBinaryObject exeFile = verifyBinary(project, exePath);
// If debugging
if(mode.equals("debug"))
{
// Get debug configuration
ICDebugConfiguration config = getDebugConfig(configuration);
// Get debugger instance
ICDIDebugger2 debugger = (ICDIDebugger2)config.createDebugger();
// Create session
ICDISession session = debugger2.createSession(launch, exePath.toFile(), monitor);
// Note: Copied from LocalCDILaunchDelegate
boolean stopInMain = configuration.getAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN, false );
String stopSymbol = null;
if ( stopInMain )
stopSymbol = launch.getLaunchConfiguration().getAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN_SYMBOL, ICDTLaunchConfigurationConstants.DEBUGGER_STOP_AT_MAIN_SYMBOL_DEFAULT );
ICDITarget[] targets = session.getTargets();
for( int i = 0; i < targets.length; i++ ) {
Process process = targets[i].getProcess();
IProcess iprocess = null;
if ( process != null ) {
iprocess = DebugPlugin.newProcess( launch, process, renderProcessLabel( exePath.toOSString() ), getDefaultProcessMap() );
}
// Note: Failing here with SIGILL
CDIDebugModel.newDebugTarget( launch, project.getProject(), targets[i], renderTargetLabel( config ), iprocess, exeFile, true, false, stopSymbol, true );
}
}
}
Моя проблема в том, что я получаю ошибку SIGILL от GDB при вызове CDIDebugModel.newDebugTarget (). Если я пропущу эту строку, то сеанс отладчика будет создан, но точки останова не достигнуты.
Когда я пытаюсь отладить вручную в командной строке, используя тот же двоичный файл, который был создан (и не удалось) в Eclipse, у меня не возникает никаких проблем. Единственное отличие, которое я заметил, было то, что я вызываю «load [BinaryName]» перед запуском команды «continue» (не выполнение этого приводит к той же ошибке SIGILL).
Есть идеи?
Спасибо,
Alan