Отобразите стек вызовов в Delphi приложение Win32

Если вы хотите обработать только текущую папку,

  1. удалите -Recurse
  2. , используйте -Path '.\*'
  3. , имейте в виду, что команда перезаписать любые ранее существующие .txt файлы
    , а также .txt файлы из других файлов с тем же BaseName.
    Чтобы преодолеть это, вы можете Group-Object файлы с тем же BaseName.

Я бы сохранил это как функцию в профиле, поэтому у вас всегда есть к ней доступ.

## Q:\Test\2019\03\03\SO_54968726.ps1
Function New-TextRef {
  Get-ChildItem -Path '.\*' -File |
    Where-Object Extension -Notin '.txt','.mkv','.avi','.mp4','.jpg','.png','.wav'|
      Group-Object BaseName | ForEach-Object{
        [System.IO.File]::WriteAllText(("{0}\{1}.txt" -f (Pwd).Path,

Если вы хотите обработать только текущую папку,

  1. удалите -Recurse
  2. , используйте -Path '.\*'
  3. , имейте в виду, что команда перезаписать любые ранее существующие .txt файлы
    , а также .txt файлы из других файлов с тем же BaseName.
    Чтобы преодолеть это, вы можете Group-Object файлы с тем же BaseName.

Я бы сохранил это как функцию в профиле, поэтому у вас всегда есть к ней доступ.

[110]

Как бы вы ни назвали файл сценария .ps1, вы также можете .dot получить его (загрузить в текущий сеанс).

После активации вы можете просто запустить функцию с именем New-TextRef в текущей папке и получить созданные вами .txt файлы.

Пример вывода:

> Get-ChildItem

    Directory: Q:\Test\2019\03\03

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2019-03-03     22:30            377 netsh_wlan_show_profiles
-a----       2019-03-04     00:31            343 SO_54968726.ps1
-a----       2019-03-03     23:02            328 SO_54972848.ps1
-a----       2019-03-03     22:32            216 SU_1410873.cmd
-a----       2019-03-03     22:47            216 test.xml
-a----       2019-03-03     23:02            194 testNew.xml


> . .\SO_54968726.ps1

> New-TextRef

> Get-ChildItem

    Directory: Q:\Test\2019\03\03

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2019-03-03     22:30            377 netsh_wlan_show_profiles
-a----       2019-03-04     00:36             43 netsh_wlan_show_profiles.txt
-a----       2019-03-04     00:31            343 SO_54968726.ps1
-a----       2019-03-04     00:36             34 SO_54968726.txt
-a----       2019-03-03     23:02            328 SO_54972848.ps1
-a----       2019-03-04     00:36             34 SO_54972848.txt
-a----       2019-03-03     22:32            216 SU_1410873.cmd
-a----       2019-03-04     00:36             33 SU_1410873.txt
-a----       2019-03-04     00:36             27 test.txt
-a----       2019-03-03     22:47            216 test.xml
-a----       2019-03-04     00:36             30 testNew.txt
-a----       2019-03-03     23:02            194 testNew.xml

> Select-String '^' *.txt

netsh_wlan_show_profiles.txt:1:Q:\Test\2019\03\03\netsh_wlan_show_profiles
SO_54968726.txt:1:Q:\Test\2019\03\03\SO_54968726.ps1
SO_54972848.txt:1:Q:\Test\2019\03\03\SO_54972848.ps1
SU_1410873.txt:1:Q:\Test\2019\03\03\SU_1410873.cmd
test.txt:1:Q:\Test\2019\03\03\test.xml
testNew.txt:1:Q:\Test\2019\03\03\testNew.xml
.Name),(

Если вы хотите обработать только текущую папку,

  1. удалите -Recurse
  2. , используйте -Path '.\*'
  3. , имейте в виду, что команда перезаписать любые ранее существующие .txt файлы
    , а также .txt файлы из других файлов с тем же BaseName.
    Чтобы преодолеть это, вы можете Group-Object файлы с тем же BaseName.

Я бы сохранил это как функцию в профиле, поэтому у вас всегда есть к ней доступ.

[110]

Как бы вы ни назвали файл сценария .ps1, вы также можете .dot получить его (загрузить в текущий сеанс).

После активации вы можете просто запустить функцию с именем New-TextRef в текущей папке и получить созданные вами .txt файлы.

Пример вывода:

> Get-ChildItem

    Directory: Q:\Test\2019\03\03

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2019-03-03     22:30            377 netsh_wlan_show_profiles
-a----       2019-03-04     00:31            343 SO_54968726.ps1
-a----       2019-03-03     23:02            328 SO_54972848.ps1
-a----       2019-03-03     22:32            216 SU_1410873.cmd
-a----       2019-03-03     22:47            216 test.xml
-a----       2019-03-03     23:02            194 testNew.xml


> . .\SO_54968726.ps1

> New-TextRef

> Get-ChildItem

    Directory: Q:\Test\2019\03\03

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2019-03-03     22:30            377 netsh_wlan_show_profiles
-a----       2019-03-04     00:36             43 netsh_wlan_show_profiles.txt
-a----       2019-03-04     00:31            343 SO_54968726.ps1
-a----       2019-03-04     00:36             34 SO_54968726.txt
-a----       2019-03-03     23:02            328 SO_54972848.ps1
-a----       2019-03-04     00:36             34 SO_54972848.txt
-a----       2019-03-03     22:32            216 SU_1410873.cmd
-a----       2019-03-04     00:36             33 SU_1410873.txt
-a----       2019-03-04     00:36             27 test.txt
-a----       2019-03-03     22:47            216 test.xml
-a----       2019-03-04     00:36             30 testNew.txt
-a----       2019-03-03     23:02            194 testNew.xml

> Select-String '^' *.txt

netsh_wlan_show_profiles.txt:1:Q:\Test\2019\03\03\netsh_wlan_show_profiles
SO_54968726.txt:1:Q:\Test\2019\03\03\SO_54968726.ps1
SO_54972848.txt:1:Q:\Test\2019\03\03\SO_54972848.ps1
SU_1410873.txt:1:Q:\Test\2019\03\03\SU_1410873.cmd
test.txt:1:Q:\Test\2019\03\03\test.xml
testNew.txt:1:Q:\Test\2019\03\03\testNew.xml
.Group -join "`n")) } }

Как бы вы ни назвали файл сценария .ps1, вы также можете .dot получить его (загрузить в текущий сеанс).

После активации вы можете просто запустить функцию с именем New-TextRef в текущей папке и получить созданные вами .txt файлы.

Пример вывода:

> Get-ChildItem

    Directory: Q:\Test\2019\03\03

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2019-03-03     22:30            377 netsh_wlan_show_profiles
-a----       2019-03-04     00:31            343 SO_54968726.ps1
-a----       2019-03-03     23:02            328 SO_54972848.ps1
-a----       2019-03-03     22:32            216 SU_1410873.cmd
-a----       2019-03-03     22:47            216 test.xml
-a----       2019-03-03     23:02            194 testNew.xml


> . .\SO_54968726.ps1

> New-TextRef

> Get-ChildItem

    Directory: Q:\Test\2019\03\03

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2019-03-03     22:30            377 netsh_wlan_show_profiles
-a----       2019-03-04     00:36             43 netsh_wlan_show_profiles.txt
-a----       2019-03-04     00:31            343 SO_54968726.ps1
-a----       2019-03-04     00:36             34 SO_54968726.txt
-a----       2019-03-03     23:02            328 SO_54972848.ps1
-a----       2019-03-04     00:36             34 SO_54972848.txt
-a----       2019-03-03     22:32            216 SU_1410873.cmd
-a----       2019-03-04     00:36             33 SU_1410873.txt
-a----       2019-03-04     00:36             27 test.txt
-a----       2019-03-03     22:47            216 test.xml
-a----       2019-03-04     00:36             30 testNew.txt
-a----       2019-03-03     23:02            194 testNew.xml

> Select-String '^' *.txt

netsh_wlan_show_profiles.txt:1:Q:\Test\2019\03\03\netsh_wlan_show_profiles
SO_54968726.txt:1:Q:\Test\2019\03\03\SO_54968726.ps1
SO_54972848.txt:1:Q:\Test\2019\03\03\SO_54972848.ps1
SU_1410873.txt:1:Q:\Test\2019\03\03\SU_1410873.cmd
test.txt:1:Q:\Test\2019\03\03\test.xml
testNew.txt:1:Q:\Test\2019\03\03\testNew.xml
16
задан JosephStyons 3 November 2008 в 14:17
поделиться

3 ответа

madExcept имеет метод StackTrace (в единице madStackTrace), который делает это.

Библиотека Кода ДЖЕДАЯ схожая функциональность предложений в единице JclDebug.

23
ответ дан 30 November 2019 в 16:50
поделиться

Мы используем Исключительную магию , и она нам очень подходит. С его помощью вы можете сделать что-то вроде этого:

try
    raise Exception.Create('Something bad happened...');
except
    on e: Exception do begin
        CallStack := TStringList.Create;
        try
            ExceptionHook.LogException; // Logs call stack
            ExceptionHook.CallStack.Dump(CallStack);
            ShowMessage(CallStack.Text);
        finally
            CallStack.Free;
            end;
        end;
    end;

Это дает довольно подробный стек вызовов:

Exception 'Exception' in module BOAppTemplate.exe at 003F3C36
Something bad happened...

Module: BOAppUnit, Source: BOAppUnit.pas, Line 66
Procedure: MyProcedure

Call stack:
:007F4C36 [BOAppTemplate.exe] MyProcedure (BOAppUnit.pas, line 66)
:7C812AFB [kernel32.dll]
:007F4C36 [BOAppTemplate.exe] MyProcedure (BOAppUnit.pas, line 66)
:00404DF4 [BOAppTemplate.exe] System::__linkproc__ AfterConstruction
Recursive call (2 times):
:007F4C36 [BOAppTemplate.exe] MyProcedure (BOAppUnit.pas, line 66)
:007F4CE6 [BOAppTemplate.exe] MyProcedure (BOAppUnit.pas, line 79)
:007F4D22 [BOAppTemplate.exe] Boappunit::TBOAppForm::Button1Click (BOAppUnit.pas, line 82)
:004604C2 [BOAppTemplate.exe] Controls::TControl::Click
:004487FB [BOAppTemplate.exe] Stdctrls::TButton::Click
:004488F9 [BOAppTemplate.exe] Stdctrls::TButton::CNCommand
:0045FFBA [BOAppTemplate.exe] Controls::TControl::WndProc

Exceptional Magic стоит всего 25 долларов без исходного кода, так что это относительно дешево. Надеюсь, это поможет!

8
ответ дан 30 November 2019 в 16:50
поделиться

Возможно, вас заинтересует эта статья: "Новый класс Exception в Delphi 2009 и выше"

5
ответ дан 30 November 2019 в 16:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: