Не уверен, возможно ли это в Visual Studio. По крайней мере, документированные возможности для точек трассировки, похоже, не охватывают то, что вам нужно.
Одним из альтернативных решений будет использование WinDbg (входит в Средства отладки для
Windows . С WinDbg вы можете, например:
bp kernel32! CreateFileW "du poi (@ esp + 4); gc"
Эта команда:
- Устанавливает точку останова для интересующей вас функции ( bp ).
- При попадании в точку останова выполняет часть в "". Это распечатывает интересующий вас параметр и продолжает отладку. То есть для примера CreateFile:
du - выводит строку юникода по адресу, указанному ( poi ) с помощью (@ esp + 4)
gc - команда возобновляет выполнение с условной точки останова тем же способом, который использовался для достижения точки останова (пошаговое выполнение, трассировка или произвольное выполнение).
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ: После удаленного ответа Асафа Леви (я хотел проголосовать за него, потому что это помогло с обучением чему-то / дал мне толчок попробовать это снова в VS :-). К сожалению, он был быстрее с удалением, чем я был с голосования.
Мне удалось заставить работать трассировку для CreateFile (имя файла) аналогично тому, как я это делал в WinDbg в Visual Studio (для справки я использую 2010). Что я сделал:
- Я выбрал «Перейти к разборке», находясь в отладчике, и перешел к вызову CreateFileW. Я взял имя функции оттуда (то есть _CreateFileW @ 28).
- Я зашел в окно точек останова, выбрал New -> Break at function ... (Ctrl + B). Введено имя (_CreateFileW @ 28). Я также попробовал способ WinDbg (kernel32! CreateFileW), но он не работает (не поддерживается?)
- Выбрал «Когда нажата ...» в точке останова и ввел: «CreateFileW FileName: {* ((const wchar_t **) (@ esp + 4))}», выбрано «Продолжить выполнение».
С моим тестовым кодом сейчас что-то в строках:
CreateFileW FileName: 0x7efddc00 "c: \ Temp \ test.out"
распечатывается для вызова CreateFile.
Так что в принципе это работает / должно работать в VS также. Требуется немного возиться, но это работает.
EDIT2: Также Это может помочь / упростить ситуацию, если вы настроите использование «Серверов Microsoft Symbol». Пожалуйста, смотрите: Используйте сервер символов . Его также можно настроить для работы без серверов символов, но при создании точки останова необходимо адаптировать шаг 1 и использовать адрес вместо символьного имени.