我目前使用下面的功能打印我的調試字符串:醒目va_list的錯誤
void Script::OutputDebugStringN(const char *format, ...)
{
char outstring[256];
memset(outstring, 0, sizeof(outstring));
try
{
va_list args = {0};
va_start(args, format); //args = (va_list) (&format+1);
vsprintf(outstring, format, args);
va_end(args);
OutputDebugString(outstring);
}
catch (...) //most likely reference val arg error (va_list doesn't support ref args)
{
OutputDebugString("[OutputDebugStringN] Something went wrong\n");
}
}
我收到一個「類型‘System.AccessViolationException’未處理的異常發生在Editor.exe」錯誤消息每我發送一個參考值的參數;這是完全可以理解的,但我想知道如何將它封裝在可能的try catch語句中,以防止錯誤關閉我的整個程序。 (以上不起作用)
我目前從我的c#編輯器調用一個自制的C++ dll(具有上述功能)。
這裏的C#代碼:
private void ComponentDispatcher_ThreadIdle(object sender, EventArgs e)
{
//render display window (if something is not blocking it)
if (renderViewHost.Update)
{
try { NativeMethods.UpdateRenderWindow(); }
catch (Exception exc)
{ Debug.WriteLine("[ThreadIdle::UpdateRenderWindow] Exception caught: {0}" + exc); }
}
}
我只是覺得不能接受的是我的函數打印出我的調試字符串在本身的錯誤。有任何想法嗎?所有關於錯誤代碼/觀察的評論都是受歡迎的
你有沒有嘗試過更大的outstring緩衝區? – didierc
我沒有看到自定義調試功能在您的C#代碼中使用的位置。 – didierc
我的c#代碼中沒有自定義調試功能。代碼例如:OutputDebugStringN(「[Script :: ParseTokens] Searched Bookmark:%s found \ n」,bookmark);如果書籤是通過引用傳入的變量,則會觸發內存錯誤。 – dk123