{"id":13697873,"url":"https://github.com/ceefour/wincachegrind","last_synced_at":"2026-01-20T17:24:01.071Z","repository":{"id":6841348,"uuid":"8089824","full_name":"ceefour/wincachegrind","owner":"ceefour","description":"[NO LONGER MAINTAINED] WinCacheGrind is a viewer for cachegrind.out files generated by xdebug 2. WinCacheGrind is functionally similar to KCacheGrind, only it is much simpler and runs on Windows.","archived":false,"fork":false,"pushed_at":"2021-09-21T19:26:49.000Z","size":496,"stargazers_count":193,"open_issues_count":8,"forks_count":29,"subscribers_count":29,"default_branch":"master","last_synced_at":"2024-11-13T01:35:10.928Z","etag":null,"topics":["debug","kcachegrind","php","profiler","valgrind","xdebug"],"latest_commit_sha":null,"homepage":"https://ceefour.github.io/wincachegrind","language":"Pascal","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ceefour.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-02-08T08:05:33.000Z","updated_at":"2024-10-24T07:36:16.000Z","dependencies_parsed_at":"2022-08-26T04:20:26.130Z","dependency_job_id":null,"html_url":"https://github.com/ceefour/wincachegrind","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ceefour%2Fwincachegrind","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ceefour%2Fwincachegrind/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ceefour%2Fwincachegrind/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ceefour%2Fwincachegrind/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ceefour","download_url":"https://codeload.github.com/ceefour/wincachegrind/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252252643,"owners_count":21718765,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["debug","kcachegrind","php","profiler","valgrind","xdebug"],"created_at":"2024-08-02T18:01:04.240Z","updated_at":"2026-01-20T17:24:01.062Z","avatar_url":"https://github.com/ceefour.png","language":"Pascal","funding_links":[],"categories":["Pascal"],"sub_categories":[],"readme":"# WinCacheGrind\n\nby [Hendy Irawan](http://www.hendyirawan.com/)\n\nWinCacheGrind is a viewer for cachegrind.out files generated by [xdebug 2](http://xdebug.org/).\nWinCacheGrind is functionally similar to [KCacheGrind](http://kcachegrind.sourceforge.net/),\nonly it is much simpler and runs on Windows.\n\nProject started: Jan 17, 2005 around 6 o'clock in the morning West Indonesia Time\n\n## PROJECT IS NO LONGER MAINTAINED\n\nWinCacheGrind is no longer maintained.\n\nYou may have better luck with [QCacheGrind](https://sourceforge.net/projects/qcachegrindwin/), which is a popular alternative for Windows.\n\n- Hendy\n\n\n## Overview\n\nThis project is a [KCacheGrind](http://kcachegrind.sourceforge.net/)-wannabe for Windows.\nAt least it can process `cachegrind.out` of [xdebug](http://xdebug.org/)-2.0.0 beta 1 for PHP.\nTo view version of this program please use Help, About.\n\n## Usage\n\nJust open a `cachegrind.out` file and do clicks anywhere you want.\n\nPlease do also right clicks since many things in this program are right-clickable, and some features are only accessible using a right click.\n\nAs an added bonus, you can drag and drop as many files as you want from Windows Explorer to the \nWinCacheGrind window. \n\nDon't get too excited dropping too many files, though :-P (WinCacheGrind loads all data into memory).\n\n## License\n\nThis program uses [GNU General Public License v3 license](https://www.gnu.org/copyleft/gpl.html).\nPlease see `LICENSE` for complete license.\n\n## File format\n\n`cachegrind.out` file format is \"guessed\" and the guesses are described in\n`cachegrind.out File Format.md` file.\n\n## Quirks \u0026 Known Issues\n\n* May (or will) not work with anything other than xdebug-2.0.0 beta 1 output.\n* Constructor and destructor type is guessed and hardcoded, since there is no\n  actual information whether a particular function is a constructor/destructor.\n* No function parameters (non-existant information)\n* The overall/merged list only filters functions, but all the displayed information\n  is within global scope i.e. the number of calls, percentage, times, etc.\n  are collected from the entire profile, not only inside the node/function that\n  you select in the tree control.\n* Any very small time value (nearing 0ms or 0%) will be displayed as \"-\".\n\n\tThis is not a bug but it's just to clean up the user interface so you won't\n\thave to see lots of zeros. I think this is much nicer because you won't\n\tcare about superlightning speed functions anyway.\n\n* TONS OF BUGS :-P\n* As of xdebug 2.0.0 beta 1 it has some odd behavior sometimes, in that it doesn't\n  print \"summary:\" line and some functions are printed but never called, which is\n  bizarre. It is okay for {main} and exit procedures/destructors, since they're\n  called automatically by PHP. But this happens in ordinarily called functions,\n  so I believe it is a bug in xdebug. And it also doesn't give any information\n  about {main}, which is very frustrating.\n  \n\tWinCacheGrind will try its best to read such files, it should give you\n\taccurate time values. However, in this case the call structure will definitely\n\tnot reflect the actual run.\n\t\n\tUpdate: After some experimentation it turns out that one of the causes for\n\tthis is usage of exit() or die() PHP function. Changing this to return()\n\tsolves the problem. However it should be noted that return() is not a\n\tsubstitute for die/exit, especially the fact that return will only terminate\n\ta script if used inside the main script, not a function or an included file.\n\t\n\tI will try to report this to xdebug author.\n\t\n* Memory leaks!!! I tried to use MemProof to fix this but I can't seem to\n  use it well, and most of the time MemProof shows number of errors but\n  the error list is empty. :-(\n\n\tBy the way, Delphi 7 had tons of memory leaks, so I have no too big problem\n\twith this. :-P\n\t\n* Largest file tested: 10 MB `cachegrind.out` file, 8 MB memory usage\n  File parsing/loading takes several seconds, but after that everything is\n  quick, even column sorting, finding, etc. BTW this is a script which takes\n  10 seconds to run! (it's a script to update MDB database schemas) So for\n  your everyday script (which is usually less than 1 or 2 seconds runtime)\n  WinCacheGrind should have no problems handling these.\n\n## Wish List\n\n* Graphical \"time bar\" on every time value\n\n\tNot that I haven't tried, but the first thing, Delphi doesn't provide much\n\tinformation for drawing owner-drawn subitems in a list view (it seems that\n\twe have to figure out the TRect by ourselves). And the ugliest thing is\n\tthat when resizing a column, the column width property isn't updated until\n\tafter the resize is done. And it doesn't even repaint!\n\t\n\tAny help on this will be highly appreciated.\n\t\n* Add filtering options, e.g. minimum number of calls, minimum time, etc.\n* Prevent Delphi from reordering the MDI child windows everytime a window\n  is activated. It's so annoying! :-(\n* Speed up loading. Currently I think the main speed boost would be if\n  I can utilize binary search in the loading function. I'm too lazy to\n  implement something like that. :-(\n  \n\tUpdate: Now it uses JCL's string hash map, it's a bit faster than before,\n\tbut not as fast than I'd imagine. :-(\n\n## Development\n\nI make no guarantee that I will continue to develop this program.\nBut if you plan to continue developing this project or derive a work based on this \nplease notify me first so there won't be too many branches if there're more than one interested person.\n\n## Source Code\n\nSource code is available at https://github.com/ceefour/wincachegrind .\nI am expecting some people\nto be interested in developing this project so I don't want too many different\nindependent works based on this project.\n\n## Compiling the source\n\nTo compile the source, you need the following:\n\n* Delphi 7\n* [JVCL v3.47 (+JCL)](http://sourceforge.net/projects/jvcl/files/JVCL%203/JVCL%203.47/)\n\n\tImportant: Apply [bugfix 6024](http://issuetracker.delphi-jedi.org/view.php?id=6024)\n\tto `JVCL347\\jvcl\\devtools\\PackagesGenerator\\GenerateDefines.pas`.\n\n## Credits \u0026 Acknowledgments\n\n* [Xdebug](http://www.xdebug.org)\n\n\tThe thing that made me had to do this. ;-)\n\n* [KCacheGrind](http://kcachegrind.sourceforge.net)\n\n\tIf it runs on Windows (without KDE+Cygwin), I really won't have to do this.\n\n* [CacheGrind](http://valgrind.org/docs/manual/cg-manual.html)\n\n\tFor the \"comprehensive\" file format explanation. :-P\n\n* [phpDocumentor](http://phpdocu.sourceforge.net)\n\n\tWhere I got those cute icons. :-D\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fceefour%2Fwincachegrind","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fceefour%2Fwincachegrind","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fceefour%2Fwincachegrind/lists"}