Поскольку кто-то сказал выше: Отладчик! = IDE.
gdb и (назад в день) (автономные) TurboDebugger работают просто великолепно для языков, которые они поддерживают [редактор], спасибо. (или еще более старая технология: отладчик Clipper связался в сам xBase исполняемый файл) - ни один из них не потребовал IDE
кроме того, хотя C / ++ кодирование более редко, printf операторы иногда маска от самой ошибки, Вы пытаетесь найти! (проблемы инициализации в автоматическом Варе на стеке, например, или выделение памяти / выравнивание)
Наконец, как другие заявили, можно использовать обоих. Некоторые проблемы оперативного выхода почти требуют печати, или по крайней мере разумного "*video_dbg = (is_good? '+': '-')"; где-нибудь в видеопамять. Мой возраст показывает, это находилось под DOS:-)
TMTOWTDI
Мне настолько понравился ответ Марка Брэкетта , что я сделал свою быструю реализацию. Вот оно, если кому-то это срочно понадобится:
public class NetworkConnection : IDisposable
{
string _networkName;
public NetworkConnection(string networkName,
NetworkCredential credentials)
{
_networkName = networkName;
var netResource = new NetResource()
{
Scope = ResourceScope.GlobalNetwork,
ResourceType = ResourceType.Disk,
DisplayType = ResourceDisplaytype.Share,
RemoteName = networkName
};
var userName = string.IsNullOrEmpty(credentials.Domain)
? credentials.UserName
: string.Format(@"{0}\{1}", credentials.Domain, credentials.UserName);
var result = WNetAddConnection2(
netResource,
credentials.Password,
userName,
0);
if (result != 0)
{
throw new Win32Exception(result);
}
}
~NetworkConnection()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
WNetCancelConnection2(_networkName, 0, true);
}
[DllImport("mpr.dll")]
private static extern int WNetAddConnection2(NetResource netResource,
string password, string username, int flags);
[DllImport("mpr.dll")]
private static extern int WNetCancelConnection2(string name, int flags,
bool force);
}
[StructLayout(LayoutKind.Sequential)]
public class NetResource
{
public ResourceScope Scope;
public ResourceType ResourceType;
public ResourceDisplaytype DisplayType;
public int Usage;
public string LocalName;
public string RemoteName;
public string Comment;
public string Provider;
}
public enum ResourceScope : int
{
Connected = 1,
GlobalNetwork,
Remembered,
Recent,
Context
};
public enum ResourceType : int
{
Any = 0,
Disk = 1,
Print = 2,
Reserved = 8,
}
public enum ResourceDisplaytype : int
{
Generic = 0x0,
Domain = 0x01,
Server = 0x02,
Share = 0x03,
File = 0x04,
Group = 0x05,
Network = 0x06,
Root = 0x07,
Shareadmin = 0x08,
Directory = 0x09,
Tree = 0x0a,
Ndscontainer = 0x0b
}
Хорошо ... я могу пересмотреть ..
Отказ от ответственности: у меня только что был день 18 часов (опять же) .. Я старый и забыл .. Я не могу пишется .. У меня короткое внимание Продолжительность так мне лучше отвечать быстрее ..: -)
Вопрос:
Можно ли изменять принцип нити пользователю без учетной записи на локальной машине?
Ответ:
Да, вы можете изменить принцип нити, даже если учетные данные, которые вы используете, не определены локально или находятся за пределами «леса».
Я просто бежал в эту проблему при попытке подключения к SQL Server с аутентификацией NTLM из службы. Этот вызов использует учетные данные, связанные с процессом, означающим, что вам нужна локальная учетная запись, либо учетная запись домена для аутентификации, прежде чем вы сможете сдать. BLAH, BLAH ...
Но ...
Звонок в логотнике (..) С атрибутом ???? _ New_credentials вернет токен безопасности, не пытаясь аутентифицировать учетные данные. Kewl .. не нужно определять учетную запись в «лесу». После того, как у вас есть токен, вам может придеться позвонить в дубликатена () с возможностью разрешения подражания, что приведет к новому жетону. Теперь вызовите SetThreadtoken (NULL, токен); (Это может быть и токен?) .. Вызов беспечно-аспинателоггенератор (токен); может потребоваться, но я так не думаю. Посмотрите ..
Делайте то, что вам нужно сделать ..
Вызов RevertToself (), если вы назвали невероятным (), затем Setthreadtoken (NULL, NULL); (Думаю ... посмотрите на это), а потом закрывать () на созданных ручках ..
Нет обещаний, но это сработало для меня ... Это от верхней части моей головы (как мои волосы) и я не могу записать !!!