2016-12-14 2 views
3

В C# я могу написать:Как создать точку останова программно на Android

if(Debugger.IsAttached) 
    Debugger.Break(); 

Это не имеет никакого эффекта, когда программа не отлаживается. Когда отладчик подключен, он ведет себя как точка останова, которая никогда не может быть отключена. Как я могу добиться подобного эффекта на Android?

Или, может быть, я не должен фокусироваться на контрольных точках вообще. То, что я действительно хочу, - это не иметь никакого значения при регулярном использовании (общее сообщение об ошибке будет показано пользователю), но источник ошибки становится очевидным в тот момент, когда разработчик начнет смотреть на него. Я пробовал утверждать, но это суб-проект, который скомпилирован, чтобы выпустить вкус большую часть времени, и я не могу полагаться на кого-то, кто помнит, чтобы переключить его на отладку.

+0

Я никогда не слышал, чтобы установочные точки разрыва изнутри debuggee на Java/Android были возможны. Обычно прерывает набор отладчиком, а не дебютом. – Robert

+0

@Robert Сама концепция довольно старая, у нас есть '__asm ​​__ (« int $ 3 »);', 'DebugBreak();' и так далее. Я не мог найти Java-эквивалент, как вы говорите. –

ответ

0

Если я ясно понимаю вас - попробуйте этот фрагмент кода:

if (BuildConfig.DEBUG) { 
     // Your, developers behavior 
    } 
    else { 
     // release behavior 
    } 
+0

Думаю, ему нужна точка останова, где программа может остановить скорее некоторый код, который вызывается в сборке. –

+0

Аромат выпускается так: 'BuildConfig.DEBUG' = false; –

+0

@Michel_T. В худшем случае я могу бросить какое-то неприятное исключение - это должно привлечь некоторое внимание. Но только если бы я мог быть на 100% уверен, что кто-то действительно наблюдает. –

1

Я думаю, что Debug.isDebuggerConnected() является то, что вы ищете. Это вернет true, только если приложение запущено с прикрепленным отладчиком и false в противном случае, независимо от build type или flavor. К сожалению, я не думаю, что вы можете остановить выполнение программно, но с приведенной выше инструкцией вы должны иметь возможность отображать сообщение об ошибке или выдавать исключение. Лично я думаю о чем-то вроде этого:

if (Debug.isDebuggerConnected()) { 
    // throw an exception for the developer with a detailed message 
} else { 
    // show the general error message to the user with a dialog/toast  
} 
Смежные вопросы