Курилка программистов, Флуд на около программерские темы |
Здравствуйте, гость ( Авторизация | Регистрация )
Курилка программистов, Флуд на около программерские темы |
19.01.2018, 22:37
Сообщение
#201
|
|
Доктор Игровых Наук Репутация: 1084 Группа: Участник Сообщений: 3950 Награды: 6 Регистрация: 24.08.2010 |
RedPxthon, исправь лучше то, что комментарий перекрывает вторую секцию. За этим надо к вендору обращаться, на этом мои полномочия все -------------------- |
 
|
|
|
|
28.01.2018, 01:41
Сообщение
#202
|
|
Почти Игроман Репутация: 91 Группа: Модератор Сообщений: 516 Награды: 4 Регистрация: 19.07.2015 |
Есть идеи как получить валидный StackWalk64 с включенной оптимизацией? Ну или аналог старого blackbox?
-------------------- В армии по 01.07.2020. |
 
|
|
28.01.2018, 02:05
Сообщение
#203
|
|
Игровой Эксперт Репутация: 407 Группа: Участник Сообщений: 2394 Награды: 5 Регистрация: 19.01.2009 |
Есть идеи как получить валидный StackWalk64 с включенной оптимизацией? Ну или аналог старого blackbox? |
 
|
|
28.01.2018, 13:56
Сообщение
#204
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
Есть идеи как получить валидный StackWalk64 с включенной оптимизацией? Никак. Оптимизатор может переместить, изменить или заинлайнить некоторые участки кода. В каком контексте задан вопрос? Если есть возможность, собирай без оптимизации, с ключом Сообщение отредактировал Орхетектор - 28.01.2018, 15:22 -------------------- nop
|
 
|
|
29.01.2018, 08:43
Сообщение
#205
|
|
Почти Игроман Репутация: 91 Группа: Модератор Сообщений: 516 Награды: 4 Регистрация: 19.07.2015 |
В каком контексте задан вопрос Под х32 всё работает, в х64 отображается только первый вызов. -------------------- В армии по 01.07.2020. |
 
|
|
29.01.2018, 10:24
Сообщение
#206
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
Под х32 всё работает, в х64 отображается только первый вызов. Понятно, что не отображается и даже понятно почему, непонятно для чего нужен стек вызовов с релизного билда? В случае если есть какой-то трудновоспроизводимый баг который воспроизводится только на релизном билде и его необходимо локализовать, можно попробовать собрать билд с ключом Во всех остальных случаях советую не сходить с ума и либо выключить оптимизацию, либо забить на раскрутку стека в логах. -------------------- nop
|
 
|
|
29.01.2018, 12:42
Сообщение
#207
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
|
 
|
|
29.01.2018, 15:13
Сообщение
#208
|
|
Почти Игроман Репутация: 91 Группа: Модератор Сообщений: 516 Награды: 4 Регистрация: 19.07.2015 |
abramcumner, да.
Орхетектор, это для общего развития просто. У нас система дампов подключена для нормальной отладки у тестеров. -------------------- В армии по 01.07.2020. |
 
|
|
28.03.2018, 01:37
Сообщение
#209
|
|
Почти Мастер Репутация: 75 Группа: Участник Сообщений: 1168 Награды: 4 Регистрация: 10.11.2015 |
Использую МАСМ. Но я считаю что он не полноценен. Там есть встроенные макрооператоры .if, .while, .until и другие.
Но мне этого мало, там нельзя использовать xmm регистры и не правильно работают макрофункции. В общем есть идея, разработать внешний транслятор операторов высокого уровня. Короче, что больше МАСМ на С/С++ больше был похож. Так же добавить выражения. Что то вроде такого. Код if(eax<10){ xmm0=xmm2*(float)eax/param eax=xmm0/xmm9 } Транслятор на выходе генерирует asm-код который нормально компилируется уже самим ml.exe. Вот как то так, можно конечно сделать и макросами(кое какой код есть существует(не мой)). Но в МАСМе есть некоторые ошибки которое это затрудняют, и которые никто не будет исправлять. Сообщение отредактировал NanoBot-AMK - 28.03.2018, 01:43 -------------------- СТАЛКЕР только для ПК!
|
 
|
|
28.03.2018, 01:40
Сообщение
#210
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
В общем есть идея, разработать внешний транслятор операторов высокого уровня. Короче, что больше МАСМ на С/С++ больше был похож. А зачем? Почему бы просто на С/С++ не писать? Компилятор генерирует более оптимальный асм нежели человек, доказано неоднократно. -------------------- nop
|
 
|
|
28.03.2018, 01:57
Сообщение
#211
|
|
Почти Мастер Репутация: 75 Группа: Участник Сообщений: 1168 Награды: 4 Регистрация: 10.11.2015 |
Кто то сказал на С, что это такой «универсальный ассемблер». Но это не так. В ассемблере нет таких ограничений, как в С/С++ и др. и нет неявного кода, именно этот неявный код меня бесит. Вот я и пытаюсь идею МАСМ развить, добавили условные операторы .if, .while, .until хорошо, добавили макропроцессор хорошо. Но это всё работает не очень хорошо, много реальных багов, которые никто не собирается фиксить. Если получится, то получу язык уровня С-- Сфинкс, но одновременно проще, и более пригодный к тому же проекту XRayExtensions. Называется ассемблер высокого уровня. MASM++ *.asmpp
Сообщение отредактировал NanoBot-AMK - 28.03.2018, 01:59 -------------------- СТАЛКЕР только для ПК!
|
 
|
|
05.04.2018, 04:37
Сообщение
#212
|
|
Почти Мастер Репутация: 111 Группа: Участник Сообщений: 1158 Награды: 3 Регистрация: 07.08.2015 |
Вопрос: На Виндовс 10 в визуалке 2013 для XP игру собрать - уже не актуально?
Я первый раз vs2013 использую. Напоролся на MFC. Что говорят примерно по теме: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxv_w32.h(40): fatal error C1189: #error: MFC does not support WINVER less than 0x0501. Please change the definition of WINVER in your project properties or precompiled header. Майкрософт больше не поддерживает Windows XP, поэтому, даже если ее можно указывать в качестве целевого объекта в Visual Studio 2013, ее поддержку нужно будет поэтапно сокращать в своих приложениях, а своим пользователям рекомендовать переходить на новые версии Windows. Для устранения ошибки определите WINVER путем обновления свойств проекта — укажите здесь самую раннюю версию Windows, на которую вы хотите в настоящее время ориентироваться. Таблицу значений для различных версий Windows см. здесь. Файл stdafx.h содержал некоторые из этих определений макросов. #define WINVER 0x0500 // these defines are set so that we get the #define _WIN32_WINNT 0x0500 // maximum set of message/flag definitions, #define _WIN32_IE 0x0400 // from both winuser.h and commctrl.h. Для WINVER мы установим Windows 7. Чтение кода в дальнейшем окажется проще, если использовать макрос для Windows 7 (_WIN32_WINNT_WIN7), а не само значение (0x0601). #define WINVER _WINNT_WIN32_WIN7 // Minimum targeted Windows version is Windows 7 Под 2010. 2008 собирается проект SDK в студии 2013. А мне надо собрать либу и делку для тулкита под 2013 в студии 2013. А что если либу и делку переименовать и заменить у них пути у основного проекта? Чем отличается компиляция под 2013 от 2010 (2008)? Грёбаный прогресс. Чем дальше, тем стремнее инструменты и движки. Там даже поиск в документах найти не могу. Сообщение отредактировал andreyholkin - 05.04.2018, 05:11 |
 
|
|
05.04.2018, 06:52
Сообщение
#213
|
|
The One Репутация: 744 Группа: Участник Сообщений: 2715 Награды: 5 Регистрация: 05.12.2005 |
andreyholkin, а в чём вопрос то собственно? Как то размыто описано. Установи platform toolset соответствующий и определи правильно WINVER, т.е. не ниже 0x0501(о чём и сказано в сообщении об ошибке) и собирай.
Не помню правда, надо ли было в 2013 студии отдельной опцией доставлять соответствующий toolset Сообщение отредактировал Neo][ - 05.04.2018, 07:00 -------------------- |
 
|
|
05.04.2018, 10:00
Сообщение
#214
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
В ассемблере нет таких ограничений, как в С/С++ и др. А что за ограничения? Ассемблер накладывает достаточно ограничений, кстати, код не переносим на другие платформы и плохо читаем, иначе для чего тебе понадобилось затаскивать туда ифы с вайлами? Каждый инструмент хорош в своей области применения, но так уж получилось, что возрастающая с каждым днем сложность разработки не оставила места для ассемблера, совсем. Хотя знание ассемблера иногда пригождается, мне вот совсем недавно довелось устанавливать хуки на CreateFile / DeleteFile путем "объезда" кода настоящей и вызова кода нужной мне ф-ии. нет неявного кода, именно этот неявный код меня бесит. Проблема неявного кода - это проблема разработчика, а не языка программирования. Чтобы неявного кода не было его достаточно не писать. Если в исходном коде все прозрачно и ты понимаешь что он делает, то тебя не должно колыхать то как компилятор соптимизирует его, это уже проблема разработчиков компиляторов. -------------------- nop
|
 
|
|
05.04.2018, 17:54
Сообщение
#215
|
|
TECHNOSLAV 80 уровня Репутация: 379 Группа: Участник Сообщений: 5758 Награды: 6 Регистрация: 26.01.2014 |
C# DataTable
Чё то не могу найти документацию о навигации по таблице. Я не собираюсь строить БД, просто хочу что-то более удобное, чем двумерный массив. Буду на основе содержаний ячеек и названий столбцов строить JSON код. Общая суть в псевдокоде В ячейке "Page" есть данные? Ну тогда generatedJSON.Append(" "ref": "@getCurrentCellContent()", "title": "@getNextCellContent()" ") Интересуют: -Навигация по строкам - переходить от одной к другой, типа foreach (row in table) либо for (i=0; i<table.Rowcount, i++) -Чтение данных из конкретных ячеек (я нахожусь в строке 3 и хочу прочитать из столбца с именем "Name", т.е. ячейка, которая соответствует [row == 3, column == "Name"] -Получение имени столбца ячейки поблизости (я нахожусь в строке 3 и в столбце с именем "Name", мне нужно проверить наличие данных в следующем столбце и получить имя следующего столбца). Мне кажется, проще будет сделать двумерный массив с заголовками в "первой строке", но для DataTable уже есть тулза для импорта EXCEL таблиц: Сообщение отредактировал Cossack-HD - 05.04.2018, 18:04 -------------------- Ryzen 3700X
Arctic Freezer 33 eSports Duo 16GB DDR4 3600MHz Strix GTX 1080 TI |
 
|
|
05.04.2018, 18:19
Сообщение
#216
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
-Навигация по строкам - переходить от одной к другой, типа foreach (row in table) либо for (i=0; i<table.Rowcount, i++) -Чтение данных из конкретных ячеек (я нахожусь в строке 3 и хочу прочитать из столбца с именем "Name", т.е. ячейка, которая соответствует [row == 3, column == "Name"] Код foreach(DataRow row in table.Rows) Console.WriteLine(row["Name"]); for(int i = 0; i < table.Rows.Count; i++) Console.WriteLine(table.Rows[i]["Name"]); Цитата -Получение имени столбца ячейки поблизости (я нахожусь в строке 3 и в столбце с именем "Name", мне нужно проверить наличие данных в следующем столбце и получить имя следующего столбца). Код Console.WriteLine(table.Columns[currentColumn.Ordinal + 1].Caption);
|
 
|
|
05.04.2018, 18:52
Сообщение
#217
|
|
TECHNOSLAV 80 уровня Репутация: 379 Группа: Участник Сообщений: 5758 Награды: 6 Регистрация: 26.01.2014 |
abramcumner, щикарно!
Значит, DataTable это как 2D array, только вместо второго индекса можно юзать имя колонки. 10/10 -------------------- Ryzen 3700X
Arctic Freezer 33 eSports Duo 16GB DDR4 3600MHz Strix GTX 1080 TI |
 
|
|
05.04.2018, 18:57
Сообщение
#218
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
|
 
|
|
05.04.2018, 20:36
Сообщение
#219
|
|
Почти Игроман Репутация: 153 Группа: Участник Сообщений: 614 Награды: 4 Регистрация: 03.05.2012 |
Есть идеи как получить валидный StackWalk64 с включенной оптимизацией? Ну или аналог старого blackbox? Что-то у меня после использования оного багтрэп перестал выводить стек в своё окно. Пока не углядел причины. Сама же штука работает, выводит почти всё, что надо. Сообщение отредактировал SkyLoader - 05.04.2018, 20:36 |
 
|
|
05.04.2018, 22:43
Сообщение
#220
|
|
Геймер Репутация: 86 Группа: Участник Сообщений: 128 Награды: 4 Регистрация: 05.05.2012 |
Кстати, для получения информации по стеку вызовов советую использовать CaptureStackBackTrace вместо StackWalk64.
Код void Hook_PrintStack() { unsigned int i; void* stack[100]; unsigned short frames; SYMBOL_INFO* symbol; HANDLE process; LPCSTR searchPath = "C:\\Program Files\\Acronis\\BackupAndRecovery;C:\\Program Files\\Common Files\\Acronis\\BackupAndRecovery\\Common"; process = GetCurrentProcess(); SymInitialize(process, searchPath, TRUE); frames = CaptureStackBackTrace(0, 100, stack, NULL); symbol = (SYMBOL_INFO *)calloc(sizeof(SYMBOL_INFO) + 256 * sizeof(char), 1); symbol->MaxNameLen = 255; symbol->SizeOfStruct = sizeof(SYMBOL_INFO); printf("------------------------------ Stack trace ------------------------------\n"); for (i = 0; i < frames; i++) { SymFromAddr(process, (DWORD64)(stack[i]), 0, symbol); printf("%i: %s - 0x%0llX\n", frames - i - 1, symbol->Name, symbol->Address); } printf("---------------------------------- End ----------------------------------\n"); free(symbol); } -------------------- nop
|
 
|
|
Текстовая версия | Сейчас: 05.05.2024, 19:33 |