// BugID is used to define "unique" bug report. // See: http://www.eurekalog.com/help/eurekalog/bug_id.php // Two reports with the same BugID is considered to be the same report. // All reports with the same BugID will be merged into one, increasing "Count"/"Occurencies" field. // This behaviour affects local bug reports (unless you have "Do not save duplicate errors" option unchecked), EurekaLog Viewer, Bug Trackers (Mantis, JIRA, FogBugs, etc.). // This allows you to see most "hot" bugs in your code - just by sorting all bugs on "Count"/"Occurencies" field. // You should fix most "hot" (therefore: urgent) bugs first. // See: http://www.eurekalog.com/help/eurekalog/reporting.php // You may redefine what "unique" bug report means - by altering BugID. // You can do this via OnCustomBugID event handler. // 16-bit ABugID is default BugID (hi-word), which includes exception type, call stack, etc. // 16-bit ACustomBugID is custom BugID (low-word), it is 0 by default and is not used by EurekaLog. // ABugID and ACustomBugID together establish a full 32-bit BugID. uses EException, EHash, ESysInfo, EEvents; initialization procedure DefineCustomBugID(const ACustom: Pointer; AExceptionInfo: TEurekaExceptionInfo; var ABugID, ACustomBugID: Word; var ACallNextHandler: Boolean); var HashSource: String; begin // Select sources which will define "unique" bug report HashSource := GetComputerName + #1 + GetUserName + #1 + GetWindowsPath + #1 + DateTimeToStr(Now) + #1 + DateTimeToStr(GetCurrentModuleCompilationDate) + #1 + GetEurekaLogVersion + #1; ACustomBugID := GetCRC16(HashSource); end; initialization RegisterEventCustomBugID(nil, DefineCustomBugID); end. // The example above establishes most unique ID possible: each report will be unique, there will be no merging at all. // You can also redefine a full BugID (i.e. overwrite pre-generated hi-word part: ABugID). // For example, you may take CRC32 value from hash source. // Then you can split 32-bit CRC32 into 16-bit ABugID and ACustomBugID.