Пара вопросов про assert из инклюдника <assert.h> 1. Если окошко консольное, то на консоль выводится полный путь исходника и номер строки, где свалился ассерт. Если дебаговый билд конечно же. Можно ли простым способом перенаправить этот вывод в свой буфер? Хотелось бы без изврата типа пайпов. 2. И самое интересное, как этот ассерт узнает где он находится? Имеется ввиду имя файла и строка. Ясно, что он эту инфу берет из дебаг-exe-шника. Вот только как именно? Есть ли для этого какое-нибудь удобное апи?
1. Либо при запуске написать myprog 2>debug.txt, либо запустить процесс CreateProcess'ом установив ему stderr на какой-нить файл, либо поправить сам макрос assert чтобы он сразу в файл сообщения гнал. 2. Он ни откуда не узнаёт, потому что уже всё знает. Когда в программе появляется ASSERT(x) в программу включается имя исходного файла и номер строки (сишниыми макросами __FILE__ и __LINE__) и всё. См. собственно текст макроса ASSERT. Если теперь этот ASSERT сработает - у него под рукой вся информация. А вообще api есть (см. в сторону DbgHelp в MSDN), но у каждого компилера оно специфическое, то что работает в MSVC, не работает в gcc/borland/и пр. С помощью этого api при наличии map-файла или pdb-файла можно по адресу (eip) смело определить имя файла и номер строки. Я так делал когда писал "красивый" обработчик exception'ов, чтобы сразу знать в каком месте накрылось (к exe'шнику был пристыкован в качестве оверлея упакованный map-файл)...
Nothing Код (Text): void main() { char temp[64]; sprintf(temp,"%s, %d",__FILE__, __LINE__); MessageBox(0,temp,0,0); } Да, все работает! )) Круто!!))) Спасибо, Nothing
Nothing И еще один вопрос. А можно ли не только файл + строку вытащить, но и еще весь call stack? Было бы просто офигительно... EDIT: орфография