Code:
52) New ioFTPD.ini option (Symbol_Path under [Location]). This is very
similiar to the _NT_SYMBOL_PATH environmental variable and thus useful
when running ioFTPD as a system service.
When writing stack backtrace information to CRASH-Log.txt it's nice to
see correct function names instead of just addresses. This is only
required for the text in CRASH-Log.txt to display accurately. If you
submit Tiny/Minidumps for debugging they can retrieve the correct
information regardless!
With no help the stack trace for the original thread in ioFTPD looks like:
ID: 3708 [00130000-0012fe94]
# 1: 7C90EB94 -> [ntdll + DB94] ? KiFastSystemCallRet() + 0x0
# 2: 00416B50 -> [ioFTPD + 15B50]
# 3: 00443219 -> [ioFTPD + 42219]
# 4: 7C816FD7 -> [kernel32 + 15FD7] ? RegisterWaitForInputIdle() + 0x49
If the ioFTPD.pdb, tcl84t.pdb, etc files are in the directory where
ioFTPD.exe is run from then function names and line numbers can be
displayed for those files. Resulting in:
ID: 1212 [00130000-0012fe94]
# 1: 7C90EB94 -> [ntdll + DB94] ? KiFastSystemCallRet() + 0x0
# 2: 00416B50 -> [ioFTPD + 15B50] ProcessMessages() + 0x40
[c:\projects\ioftpd6\6.3.0\src\internalmessagehandler.c, line 106]
# 3: 0041A2E0 -> [ioFTPD + 192E0] CommonMain() + 0x30
[c:\projects\ioftpd6\6.3.0\src\main.c, line 250]
# 4: 0041A723 -> [ioFTPD + 19723] WinMain() + 0x273
[c:\projects\ioftpd6\6.3.0\src\main.c, line 390]
# 5: 00443219 -> [ioFTPD + 42219] __tmainCRTStartup() + 0x177
[f:\sp\vctools\crt_bld\self_x86\crt\src\crt0.c, line 324]
# 6: 7C816FD7 -> [kernel32 + 15FD7] ? RegisterWaitForInputIdle() + 0x49
The ? indicates dll's that do not have loaded debugging info and thus the
name printed is the first previous exported symbol found which is often
correct for the entry point into a library but usually wrong after that.
With system symbol searching enabled the same stack looks like:
ID: 364 [00130000-0012fe94]
# 1: 7C90EB94 -> [ntdll + DB94] _KiFastSystemCallRet@0() + 0x0
# 2: 7E4191BE -> [USER32 + 81BE] _NtUserGetMessage@16() + 0xC
# 3: 00416B50 -> [ioFTPD + 15B50] ProcessMessages() + 0x40
[c:\projects\ioftpd6\6.3.0\src\internalmessagehandler.c, line 106]
# 4: 0041A2E0 -> [ioFTPD + 192E0] CommonMain() + 0x30
[c:\projects\ioftpd6\6.3.0\src\main.c, line 250]
# 5: 0041A723 -> [ioFTPD + 19723] WinMain() + 0x273
[c:\projects\ioftpd6\6.3.0\src\main.c, line 390]
# 6: 00443219 -> [ioFTPD + 42219] __tmainCRTStartup() + 0x177
[f:\sp\vctools\crt_bld\self_x86\crt\src\crt0.c, line 324]
# 7: 7C816FD7 -> [kernel32 + 15FD7] _BaseProcessStart@4() + 0x23
Notice that even the number of stack frames is incorrect without access
to the .pdb file for optimized code.
See the .ini file for how to setup a local symbol cache, enable access
to MS's downloadable symbol store temporarily so you can download the
appropriate symbol files once, and then set it to only use the local
files from then on.
53) New site command (site LoadSymbols). Very similar to "site CrashNow"
except it will force the resolving of all modules, not just those
currently referenced on the stack, and display additional information
such as the path to the located PDB for each module used for resolving
in the generated CRASH-log.txt file. Limited to master (M) accounts only.
54) Register the Allocate, ReAllocate, and Free procedures to the module
system. Should fix problems with user modules. Not sure if it will
work if _DEBUG_MEM is enabled when compiling ioFTPD (it's not by default).
55) ioFTPD-Start now defaults to a 10 (was 5) second delay before starting
ioGUI, and also takes an optional command line argument which is the
number of seconds to delay.
*** Internal changes
56) Moved version information lookup from the executable's resources from the
site ioversion command to the main startup function to support printing
version information in crash logs and eliminate redundant lookups.
57) Changed the logfile write of denied connections for auto-banned IP
addresses to be done outside of the critical section lock.
58) Fixed a bug during initialization which resulted in a call to closesocket
with an invalid socket handle.
59) Fixed a bug in the shared memory allocator of debug builds that could
result in an incorrect share count which could eventually lead to
improperly freed memory.
60) Removed old #ifdefs and defines for Registered versions only code.
61) About 100 other little things I forgot to write down...