отладка c# в командной строке

Вот подход, который я использовал, это - попытка скопировать со спокойного механизма сигналов/слотов, своего рода Шаблона "наблюдатель". Объекты могут испустить сигналы. Каждый сигнал имеет идентификатор в системе - это составлено идентификатором отправителя + имя объекта, Каждый сигнал может быть связан с получателями, который просто является "вызываемым", Вы используете класс шины, чтобы передать сигналы кому-либо заинтересованному получением их, Когда что-то происходит, Вы "отправляете" сигнал. Ниже и реализация в качестве примера

    <?php

class SignalsHandler {


    /**
     * hash of senders/signals to slots
     *
     * @var array
     */
    private static $connections = array();


    /**
     * current sender
     *
     * @var class|object
     */
    private static $sender;


    /**
     * connects an object/signal with a slot
     *
     * @param class|object $sender
     * @param string $signal
     * @param callable $slot
     */
    public static function connect($sender, $signal, $slot) {
        if (is_object($sender)) {
            self::$connections[spl_object_hash($sender)][$signal][] = $slot;
        }
        else {
            self::$connections[md5($sender)][$signal][] = $slot;
        }
    }


    /**
     * sends a signal, so all connected slots are called
     *
     * @param class|object $sender
     * @param string $signal
     * @param array $params
     */
    public static function signal($sender, $signal, $params = array()) {
        self::$sender = $sender;
        if (is_object($sender)) {
            if ( ! isset(self::$connections[spl_object_hash($sender)][$signal])) {
                return;
            }
            foreach (self::$connections[spl_object_hash($sender)][$signal] as $slot) {
                call_user_func_array($slot, (array)$params);
            }

        }
        else {
            if ( ! isset(self::$connections[md5($sender)][$signal])) {
                return;
            }
            foreach (self::$connections[md5($sender)][$signal] as $slot) {
                call_user_func_array($slot, (array)$params);
            }
        }

        self::$sender = null;
    }


    /**
     * returns a current signal sender
     *
     * @return class|object
     */
    public static function sender() {
        return self::$sender;
    }

}   

class User {

    public function login() {
        /**
         * try to login
         */
        if ( ! $logged ) {
            SignalsHandler::signal(this, 'loginFailed', 'login failed - username not valid' );
        }
    }

}

class App {
    public static function onFailedLogin($message) {
        print $message;
    }
}


$user = new User();
SignalsHandler::connect($user, 'loginFailed', array($Log, 'writeLog'));
SignalsHandler::connect($user, 'loginFailed', array('App', 'onFailedLogin'));

$user->login();

?>
8
задан pnuts 25 September 2014 в 23:46
поделиться

2 ответа

Вы можете использовать отладчик CLR , который является частью установки платформы; и не зависит от VS.

Альтернативой (и более подходящей для вашего вопроса) является MDbg , отладчик командной строки для управляемого кода.

7
ответ дан 5 December 2019 в 20:17
поделиться

Существуют отладчики командной строки, которые поставляются с Инструменты отладки для Windows , например CDB . Для управляемых приложений вам также понадобится модуль SOS .

1
ответ дан 5 December 2019 в 20:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: